.NET

Async/await とパターン

async/await、Task、ValueTask、ConfigureAwait、cancellation token、並列実行、deadlock

26 面接問題·
Senior
1

非同期メソッドにおける 'await' キーワードの主な役割は何ですか?

回答

await キーワードは Task が完了するまで非同期メソッドの実行を中断し、その間、呼び出し元の thread を解放して他のタスクを処理できるようにします。これにより thread のブロックを回避し、アプリケーションのスケーラビリティを向上させます。thread をブロックする Task.Wait() や Task.Result とは異なり、await は thread pool リソースを効率的に利用できます。

2

イベントハンドラーを除いて async void を避けるべきなのはなぜですか?

回答

async void メソッドは await できず、内部でスローされた例外は呼び出し元のコードでキャッチできないため、アプリケーションがクラッシュします。さらに、await すべき Task がないため、async void メソッドの単体テストは不可能です。イベントハンドラーは framework から呼び出され Task を返せないため、例外となります。

3

どのようなユースケースで Task<T> よりも ValueTask<T> を優先すべきですか?

回答

ValueTask は value type であり、結果が cache のように既に同期的に利用可能な場合に heap 割り当てを回避します。これにより高パフォーマンスのシナリオで garbage collector への負荷を軽減します。Task は結果が同期的であっても常に heap に割り当てられます。誤った使用はパフォーマンスを低下させる可能性があるため、パフォーマンスの向上が測定可能な場合のみ ValueTask を使用してください。

4

Task<T> と比較して ValueTask<T> に適用される重要な制約は何ですか?

5

.NET ライブラリにおける ConfigureAwait(false) の主な目的は何ですか?

+23 面接問題

次の面接に向けて.NETをマスター

すべての問題、flashcards、技術テスト、コードレビュー演習、面接シミュレーターにアクセス。

無料で始める