dis*_*kid 9 c# asynchronous async-await
我知道async方法只能返回void或Task.我已经阅读了类似方法中的异常处理async方法.我是async编程新手,所以我正在寻找一个简单的解决方案.
我的async方法运行一个Sql查询.如果查询没问题,它应该用布尔值通知调用者true,否则通知a false.我的方法目前无效,所以我无从得知.
private async void RefreshContacts()
{
Task refresh = Task.Run(() =>
{
try
{
// run the query
}
catch { }
}
);
await refresh;
}
Run Code Online (Sandbox Code Playgroud)
我只想改变async,Task以便在我的catch声明中,该方法将返回a false,否则为a true.
Jon*_*eet 16
听起来你只需要返回一个Task<bool>:
private async Task<bool> RefreshContactsAsync()
{
try
{
...
}
catch // TODO: Catch more specific exceptions
{
return false;
}
...
return true;
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,我不会抓住异常,而是让调用者检查任务是否存在故障状态,但这是另一回事.
将方法签名更改为Task<bool>。然后,如果您的方法被声明为异步,则可以简单地返回布尔值。但正如乔恩·斯凯特(Jon skeet)所说,还有其他可能更好的方法来处理您的szenario
private async Task<bool> RefreshContacts()
{
Task refresh = Task.Run(() =>
{
try
{
// run the query
return true;
}
catch { return false;}
}
Run Code Online (Sandbox Code Playgroud)
PS:您可能会遇到的另一个常见问题是,如果您有一个没有异步的方法。然后,您可以Task.FromResult(true)像这样返回:
private Task<bool> RefreshContacts()
{
....
return Task.FromResult(true)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24945 次 |
| 最近记录: |