bub*_*net 3 .net c# asynchronous 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 boolResult;
}
Run Code Online (Sandbox Code Playgroud)
这一次,没有错误,但是警告(我使用非英文版的VS,所以我翻译了错误/警告信息):
此异步方法没有await运算符,因此它将作为同步执行.
这只是一个警告,但为什么我会收到这条消息呢?
但这不是大问题.当我调用父方法PopulateTV()时,我想返回一个bool值(if(!PopulateTV()) ...
而且我收到一个错误:
!运算符不能与'System.Threading.Tasks.Task'一起使用.
当然.但是PopulateTV()返回a bool(return boolResult;),即使方法声明使用Task<bool>.
我的错误在哪里?
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |