回答編集履歴
1
文章のへんなところを修正
test
CHANGED
@@ -12,11 +12,11 @@
|
|
12
12
|
|
13
13
|
しかし!!`System.Windows.Forms.Form`のインスタンスを生成するとき、どうやらコンストラクタがSynchronizationContextを生成するようです。つまり、質問の`PrivateAccess`クラスが`Form`を継承しているかどうかで、SynchronizationContextの有無が異なっていることになります。
|
14
14
|
|
15
|
-
すると、`Main`メソッド内で呼び出している`Wait`と`privateasynctest`メソッドのawaitがぶつかってデッドロックを引き起こ
|
15
|
+
すると、`Main`メソッド内で呼び出している`Wait`と`privateasynctest`メソッドのawaitがぶつかってデッドロックを引き起こすようになるわけです。
|
16
16
|
|
17
17
|
|
18
18
|
|
19
|
-
これは……ちょっと想定外のクソ挙動で戸惑っていますが、、awaitを呼び出している式に対してそれぞれ`ConfigureAwait(false)`を付けることでSynchronizationContextの伝播を断ち切ることが
|
19
|
+
これは……ちょっと想定外のクソ挙動で戸惑っていますが、、とりあえず、awaitを呼び出している式に対してそれぞれ`ConfigureAwait(false)`を付けることでSynchronizationContextの伝播を断ち切ることができるので、async/awaitを使う際はこのコーディングを徹底することでデッドロックを完全に回避することができます。
|
20
20
|
|
21
21
|
|
22
22
|
|
@@ -104,7 +104,7 @@
|
|
104
104
|
|
105
105
|
こちらも同期コンテキストの破棄を徹底することで問題は発生しなくなると予想できますが……(もしかして、UI関係とかのコンテキストが重要な非同期メソッドはIntelliTestでは評価できないってことかしら……?)
|
106
106
|
|
107
|
-
こ
|
107
|
+
ここを掘り下げるにはさらなる調査が必要ですが、なんだか根の深い問題な気がします。
|
108
108
|
|
109
109
|
|
110
110
|
|