【发布时间】:2015-08-16 17:41:53
【问题描述】:
示例:
static void Main(string[] args)
{
int counter = 0;
var t = new System.Timers.Timer();
t.Interval = 3000;
t.Elapsed += async (sender, e) =>
{
Debug.WriteLine("Before await - Thread : {0} , Counter : {1}", Thread.CurrentThread.ManagedThreadId, counter);
await Task.Delay(1000).ConfigureAwait(true);
Debug.WriteLine("Ater await Thread : {0}, Counter : {1} ", Thread.CurrentThread.ManagedThreadId, counter);
counter++;
if (counter == 2)
{
Debug.WriteLine("Stop");
t.Stop();
}
};
t.Start();
Console.ReadKey();
}
这总是输出:
Before await - Thread : 4 , Counter : 0
Ater await Thread : 4, Counter : 0
Before await - Thread : 5 , Counter : 1
Ater await Thread : 4, Counter : 1
Stop
为什么它没有返回线程等待被调用。它是第一次执行,但随后计时器在线程 5 上运行,并假设在异步操作结束时捕获上下文,并且您可以看到它在线程 4 上返回。
【问题讨论】:
-
即使在控制台应用程序中也能正常工作
-
@msmolcic 可能碰巧让 if 停在 6 点或其他地方,看看它是否仍然如此
标签: c# multithreading asynchronous async-await