У меня есть одна служба, скажем,
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
?
В соответствии с этим ответом я не должен обертывать ненужным await
, но тогда я должен использовать Task.FromResult(false)
для короткого вызова, как в DoSomething2Async
Но в соответствии с этим ответом есть случаи с операторами try/catch
и using
, где я должен был await
перед возвратом.
Правильно ли я говорю, что
-
Если мне нужно использовать
try/catch
илиusing
, тогда я долженawait
-
В противном случае не
await
, если вы только вернетесь. И используйтеTask.FromResult
для короткого замыкания
Мне нравится DoSomething1Async
больше, и я хочу сделать это везде, если кто-то скажет, что это не имеет значения:).