項目は既に追加されています。辞書のキー: 'System.Object' 追加されるキー: 'System.Object'

WebServiceの非同期メソッドではまったのでメモ

以下のメッセージがでて調査。

項目は既に追加されています。辞書のキー: 'System.Object'  追加されるキー: 'System.Object'

   場所 System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
   場所 System.Collections.Hashtable.Add(Object key, Object value)
   場所 System.Collections.Hashtable.SyncHashtable.Add(Object key, Object value)
   場所 System.Web.Services.Protocols.SoapHttpClientProtocol.InvokeAsync(String methodName, Object[] parameters, SendOrPostCallback callback, Object userState)

コールバック先のメソッドの問題かと思って調べていたが、問題なのは呼出側だった。

修正前:hogeAsync(hoge,null);

修正後:hogeAsync(hoge,Guid.NewGuid());

これで回避。

Web参照で自動生成されるuserStateの引数には、ちゃんと識別可能なものが必要らしい。手抜き禁止。


ついでにlockステートメントを追加すべきか調査した方が良いかも

改訂版 C#入門 第9章 ステートメント
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_009/cs2_009_04.html