--- lang: ja-jp breaks: true --- # C# Task async メソッド を UIからコールした場合に、`SynchronizationContext` にスイッチできずにデッドロックするパターン 2021-12-28 ## デッドロックするパターン ```csharp= Func<Task> task = async () => await Task.Run(() => { Task.Delay(2000).Wait(); }); task().Wait(); ``` ## デッドロックしないパターン ```csharp= Func<Task> task = async () => await Task.Run(() => { Task.Delay(2000).Wait(); }) .ConfigureAwait(false); task().Wait(); ``` ```csharp= Func<Task> task = () => Task.Run(() => { Task.Delay(2000).Wait(); }); task().Wait(); ``` ###### tags: `C#` `Task` `async` `await` `SynchronizationContext`