我在重构一些遗留代码时遇到了这个问题。
考虑一个返回 Task
的接口方法:
public interface IFoo
{
Task Bar();
}
< p > Bar 方法的实现可以有两种方式:
返回 Task
:
public class Foo1 : IFoo
{
public Task Bar()
{
return Task.Run(() =>
{
/* some work */
});
}
}
或者使用 async
... await
:
public class Foo2 : IFoo
{
public async Task Bar()
{
await Task.Run(() =>
{
/* some work */
});
}
}
这些实现功能上是否等价,或者存在(潜在的微妙)差异?
Task.Wait()
呢?对于调用者而言,这两种方法是相同的。await foo1Instance.Bar();
和await foo2Instance.Bar();
将以相同的方式工作。没有理由阻塞第一个方法只是为了返回一个已完成的任务。也许你想表达其他意思吗? - Panagiotis Kanavos