【发布时间】:2017-04-22 06:14:23
【问题描述】:
我开始学习 C# TAP 编码。我不明白为什么代码是同步运行的
async private void timer1_Tick(object sender, EventArgs e)
{
SyncCount++;
result1.Text = SyncCount.ToString();
AsyncCount = await CountForALongTimeAsync(AsyncCount);
result2.Text = AsyncCount.ToString();
}
async Task<int> CountForALongTimeAsync(int counter)
{
Thread.Sleep(3000);
counter++;
return counter;
}
【问题讨论】:
-
将
Thread.Sleep更改为await Task.Delay。 -
你怎么理解是同步的还是异步的?我看到一个异步函数返回其(按值传递)参数增加了一个...
-
您应该已经收到警告说您的
CountForALongTimeAsync方法没有await表达式,因此将同步运行。很可能您应该阅读有关异步工作原理的教程……这不仅仅是一个神奇的“添加异步修饰符,它就变成了异步”功能。绝对值得合理彻底地理解它。 -
@GregaMohorko:不,它不是异步的,因为
CountForALongTimeAsync实际上是同步的。此代码将阻塞 UI 线程。
标签: c# async-await