Mar*_*rra 2 c# task-parallel-library async-await .net-4.5
当我尝试运行下面的代码时,执行同步操作.为什么?
我收到以下警告......
警告1此异步方法缺少"等待"操作符并将同步运行.考虑使用'await'运算符等待非阻塞API调用,或'await Task.Run(...)'在后台线程上执行CPU绑定工作.
private async void btProcessa_Click(object sender, EventArgs e)
{
await ProcessaA();
await ProcessaB();
}
public async Task ProcessaA()
{
for (int i = 0; i <= 100; i++)
{
pbProcessoA.Value = i;
Thread.Sleep(500);
}
}
public async Task ProcessaB()
{
for (int i = 0; i <= 100; i++)
{
pbProcessoB.Value = i;
Thread.Sleep(500);
}
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*ary 10
async并不意味着"在后台线程上运行此代码".如果您想了解更多信息async,我有一篇介绍性博客文章,MSDN文档很棒,并且有基于任务的异步模式的完整指南.
如果要对I/O绑定(或基于事件的)操作进行一些模拟,则应使用Task.Delay而不是Thread.Sleep:
public async Task ProcessaA()
{
for (int i = 0; i <= 100; i++)
{
pbProcessoA.Value = i;
await Task.Delay(500);
}
}
Run Code Online (Sandbox Code Playgroud)
如果要模拟CPU绑定操作,那么您应该通过以下方式将它们推送到后台任务Task.Run:
public async Task ProcessaA()
{
for (int i = 0; i <= 100; i++)
{
pbProcessoA.Value = i;
await Task.Run(() => { Thread.Sleep(500); });
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12135 次 |
| 最近记录: |