【发布时间】:2015-01-09 23:19:04
【问题描述】:
可以说,我有一项服务,
public interface ISomeService
{
Task<bool> DoSomeExpensiveCheckAsync(string parameter);
}
我有这个类来使用服务。它只需要做一些简单的空检查,然后返回服务响应。
public class SomeServiceConsumer
{
private readonly ISomeService _serviceClient;
public SomeServiceConsumer(ISomeService serviceClient)
{
_serviceClient = serviceClient;
}
public async Task<bool> DoSomething1Async(string someParameter)
{
if (string.IsNullOrWhiteSpace(someParameter))
{
return false;
}
return await _serviceClient.DoSomeExpensiveCheckAsync(someParameter);
}
//No async or await keywords
public Task<bool> DoSomething2Async(string someParameter)
{
if (string.IsNullOrWhiteSpace(someParameter))
{
return Task.FromResult(false);
}
return _serviceClient.DoSomeExpensiveCheckAsync(someParameter);
}
}
我应该使用DoSomething1Async 还是DoSomething2Async?
根据this answer,我不应该使用不必要的await 进行包装,但我必须使用Task.FromResult(false) 进行短路,如DoSomething2Async 中一样
但根据this answer,在某些情况下,try/catch 和using 声明我实际上应该在返回之前await。
那我说的对吗
如果我必须使用
try/catch或using,那么我应该使用await否则,如果您只打算返回,请不要
await。并使用Task.FromResult进行短路
我更喜欢DoSomething1Async,如果有人说没关系,我想在任何地方都这样做:)。
【问题讨论】:
标签: c# .net task-parallel-library async-await