类似于在同步代码中实现需要Task返回类型的接口,尽管我很好奇是否应该忽略编译器错误而不理会我的情况。
假设我有这样一个接口:
假设我有这样一个接口:
public interface IAmAwesome {
Task MakeAwesomeAsync();
}
在某些实现中,使用async
和await
异步地完成任务可以带来很多好处。这正是接口所试图实现的。
在其他情况下(也许很少见),只需使用简单的同步方法即可实现出色的效果。因此,假设实现看起来像这样:
public class SimplyAwesome : IAmAwesome {
public async Task MakeAwesomeAsync() {
// Some really awesome stuff here...
}
}
这个方法可以运行,但是编译器会发出警告:
该方法缺少“await”运算符,因此将同步运行。考虑使用“await”运算符等待非阻塞API调用, 或使用“await TaskEx.Run(...)”在后台线程上执行CPU绑定的工作。
编译器实际上建议采用以下解决方案:
public class SimplyAwesome : IAmAwesome {
public async Task MakeAwesomeAsync() {
await Task.Run(() => {
// Some really awesome stuff here, but on a BACKGROUND THREAD! WOW!
});
}
}
我的问题是 - 在什么情况下我应该忽略这个编译器警告?在某些情况下,工作非常简单,为其生成一个线程显然是适得其反的。
public interface IAmAwesome { Task MakeAwesomeAsync(); void MakeAwesome(); }
接口来公开异步和同步方法。但是,这是否适合你的实际情况则是另一回事。 - Scott Chamberlain