私はC#開発に不慣れで、より応答性の高いUIを作成したいと考えています。私の予備調査では、これを達成するための2つの方法を見てきました。
新しいということは、より良いという意味ですか? 2つの方法の違いは何ですか?新しいプロジェクトを作成したい場合、どの方法を選択すればよいですか?
編集:多分私は指定する必要があります。私はWindowsフォームアプリケーションを作成しています。このアプリケーションでは、必要なすべてのデータがローカルディスクに保存/ロードされます。また、いくつかのUSBデバイスと通信します。
BackgroundWorker
を使用してタスクを実行できます。よく知られているクラスで、多くの人が利用しています。
新しいC#5のasync
およびawait
キーワードは、基本的に、読み取り可能な非同期コードを簡単に記述できるようにします。 BackgroundWorker
ではなく、これらのキーワードを使用してさまざまなタスクを実行する方法のチュートリアルや例が少ない場合があります。
古いバージョンのC#を使用する必要がない限り、async
とawait
の使用方法を学ぶことをお勧めします。
async
およびawait
キーワードを使用しても、アプリケーション自体の応答性は向上しません。それらは単にTask
オブジェクトを返すメソッドの呼び出しと処理をより便利にします。 async
/await
が実際にバックグラウンドスレッドを使用するようにするには、次のような使用方法と組み合わせる必要があります。
Task.Start()
-TaskScheduler
を使用して特定のタスクを開始します。TaskCompletionSource
-非同期タスクを処理するカスタム方法。これを使用した1つの場所は、WebBrowser
コントロールからのイベントを処理することでした。async
メソッド。つまり、async
/await
は、タスクベースの非同期パターンの拡張です。多くのサンプルを含む大量の情報を見つけることができます here 。
BackgroundWorker
は、 Event-Based Asynchronous pattern を使用して1つのバックグラウンドスレッドを作成するWinFormsコンポーネントであり、DoWork
イベントハンドラーで独自のコードを使用して、このバックグラウンドスレッドで行われた作業にデータを入力できます。一般的に、Microsoftはこのパターンの使用を推奨していません(ページの下部 here を参照してください)。シンプルなオプションである。
言及されていない別のオプションは、 Reactive Extensions for .NET です。これは、アプリに応答性を追加するためのもう1つの優れたフレームワークです。
async
-await
はBackgroundWorker
よりもはるかに柔軟性があると思います。そして、BackgroundWorker
に適合するものを実行したい場合は、async
-await
を使用して、より読みやすく、タイプセーフなコードを使用することもできます。
そのため、async
よりもawait
-BackgroundWorker
を使用することをお勧めします。