小编bub*_*net的帖子

误解async/await函数

我使用C#/ VS2012/.Net4.0/Microsoft.Bcl.async NuGet包

在之前的问题之后,我尝试使用async/await来避免冻结UI.但是我的每个测试都没有成功.

执行繁重工作的主要功能是这样的:

public bool PopulateTV()
{
  using (WaitingForm waitingForm=new WaitingForm())
  {
    waitingForm.Show();
    bool boolResult=DoHeavyWork(); //UI is freezing, waitingForm() doesn't show correctly
    return boolResult;
  }
}
Run Code Online (Sandbox Code Playgroud)

对此功能的调用就像

if(!PopulateTV())
{
}
Run Code Online (Sandbox Code Playgroud)

我尝试实现async/await

public async Task<bool> populateTV()
{
  using (WaitingForm waitingForm=new WaitingForm())
  {
    Task<bool> func=DoHeavyWork();
    bool boolResult=await func;
    return boolResult;
  }
}

public Task<bool> DoHeavyWork()
{
  //do the work
  return boolResult;
}
Run Code Online (Sandbox Code Playgroud)

当然,我得到一个错误DoHeavyWork,因为我返回a bool而不是Task<bool>.所以我改变了DoHeavyWork功能:

public async Task<bool> DoHeavyWork()
{
  //do the work
  return …
Run Code Online (Sandbox Code Playgroud)

.net c# asynchronous async-await

3
推荐指数
1
解决办法
221
查看次数

标签 统计

.net ×1

async-await ×1

asynchronous ×1

c# ×1