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