我的方法是不在异步操作中使用静态方法和类 - 除非实现一些锁定技术来防止竞争条件。
现在已经在c#4.5+框架中引入了async / await,它简化了多线程应用程序并鼓励响应式UI。
但是 - 由于锁不能/不应该放在等待方法上(我不是在辩论)现在是否会使静态方法利用async / await完全冗余?
答案 0 :(得分:42)
我的方法是不在异步操作中使用静态方法和类 - 除非实现一些锁定技术来防止竞争条件。
为什么呢?除非您实际使用共享州,否则不应存在任何竞争条件。例如,考虑:
public static async Task<int> GetPageLength(string url)
{
string text = await new WebClient().DownloadStringTaskAsync(url);
return text.Length;
}
如果您执行具有共享状态 - 或者如果您在多个线程使用的实例上使用实例方法 - 您需要弄清楚如何理想情况下希望您的异步操作。一旦你决定了各种种族应该如何表现,实际上实施它可能相当简单。