回答編集履歴

1

文章のへんなところを修正

2017/06/23 15:37

投稿

tamoto
tamoto

スコア4133

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の伝播を断ち切ることが出来るので、async/awaitを使う際はこちらを徹底することでデッドロックを回避することができます。
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