我应该如何在async / await操作中使用静态方法/类?

时间:2012-10-24 09:13:33

标签: c# asynchronous async-await

我的方法是不在异步操作中使用静态方法和类 - 除非实现一些锁定技术来防止竞争条件。

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

但是 - 由于锁不能/不应该放在等待方法上(我不是在辩论)现在是否会使静态方法利用async / await完全冗余?

1 个答案:

答案 0 :(得分:42)

  

我的方法是不在异步操作中使用静态方法和类 - 除非实现一些锁定技术来防止竞争条件。

为什么呢?除非您实际使用共享,否则不应存在任何竞争条件。例如,考虑:

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

如果您执行具有共享状态 - 或者如果您在多个线程使用的实例上使用实例方法 - 您需要弄清楚如何理想情况下希望您的异步操作。一旦你决定了各种种族应该如何表现,实际上实施它可能相当简单。