AsyncAutoResetEvent не работает в асинхронном методе WCF

Я создал службу WCF, используя версию сообщества Visual Studio 2017 (с использованием TAP). Я использовал AsyncAutoResetEvent из справочника Microsoft.VisualStudio.Threading, но похоже, что этот обработчик ожидания не получает сигнал после вызова функции Set. Служба размещена в консольном приложении. Однако трассировки, созданные NonBlockingConsole.WriteLine, отображаются правильно.

сервер:

AsyncAutoResetEvent aare = new AsyncAutoResetEvent(false);
public async Task<string> TestfuncAsync()
{
    string strRet = "finished";
    NonBlockingConsole.WriteLine("before autoresetevent");
    await aare.WaitAsync();
    NonBlockingConsole.WriteLine("after autoresetevent");  //is not traced even if asyncautoresetevent is set
    return strRet;
}

void SetEvent()
{
    aare.Set();
    NonBlockingConsole.WriteLine("auto reset event set");
}

клиентский интерфейс:

private async void button1_Click(object sender, EventArgs e)
{
    string value = await client.TestfuncAsync();
    ...
}

private void button2_Click(object sender, EventArgs e)
{
    client.SetEvent();
}

Класс NonBlockingConsole: (повторно используется из Блокирует ли Console.WriteLine?)

public static class NonBlockingConsole
{
    private static BlockingCollection<string> m_Queue = new BlockingCollection<string>();
    static NonBlockingConsole()
    {
        var thread = new Thread(
            () =>
            {
                while (true) Console.WriteLine(m_Queue.Take());
            }
            );
        thread.IsBackground = true;
        thread.Start();
    }
    public static void WriteLine(string value)
    {
        value = DateTime.Now.ToString("<HH:mm:ss.fff>") + " " + value + " <ThreadID>: " + Thread.CurrentThread.ManagedThreadId.ToString();
        m_Queue.Add(value);
    }
}

person eyesT    schedule 24.08.2018    source источник
comment
Как вы настраивали свой контракт WCF?   -  person Jeroen Heier    schedule 24.08.2018
comment
@Jeroen Извините за поздний ответ. Только что вернулся с отпуска. Никакой специальной конфигурации, как показано ниже: [OperationContract] Task ‹string› TestfuncAsync (); [OperationContract] void SetEvent ();   -  person eyesT    schedule 28.08.2018