---
# System prepended metadata

title: C# Task async メソッド を UIからコールした場合に、`SynchronizationContext` にスイッチできずにデッドロックするパターン 2021-12-28
tags: [Task, async, C#, await, SynchronizationContext]

---

---
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`
