43

我的方法是不在异步操作中使用静态方法和类——除非实施了某种锁定技术来防止竞争条件。

现在 async/await 已被引入 c# 4.5+ 框架 - 它简化了多线程应用程序并鼓励响应式 UI。

但是 - 由于锁不能/不应该被放置在等待方法上(我没有争论)现在使用 async/await 的静态方法是否完全多余?

4

1 回答 1

70

我的方法是不在异步操作中使用静态方法和类——除非实施了某种锁定技术来防止竞争条件。

为什么?除非您实际使用 shared state,否则不应该有任何竞争条件。例如,考虑:

public static async Task<int> GetPageLength(string url)
{
    string text = await new WebClient().DownloadStringTaskAsync(url);
    return text.Length;
}

如果你确实有共享状态——或者如果你在一个被多个线程使用的实例上的实例方法中——你需要弄清楚你希望你的异步操作如何工作。一旦你决定了各种种族应该如何表现,实际实施它可能会相当简单。

于 2012-10-24T09:16:59.543 回答