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 に答える