DOBON.NET DOBON.NETプログラミング掲示板過去ログ

コールバックメッソドは共有メソッド?

環境/言語:[WinXP VB.NET2003]
分類:[.NET]

初心者の質問です。
非同期呼び出しでコールバックされるメッソド(関数)は共有メソッドでしょうか?
それとも、呼び出し元のスレッドで実体化(クラスの as New の様に)されて実行されるのでしょうか?

コールバックメッソドは呼び出し元のスレッドで実行されるとのドキュメントを読んだ記憶がありますが、複数のスレッドで同時にコールバックした時に競合するのかどうかを知りたく思います。

例:
下記の非同期呼び出しを複数のスレッドから同時に起動する。
Socket.BeginReceive(buffer, 0, BufferSize, 0, New AsyncCallback(AddressOf ReceiveCallback), state)

複数のスレッドから下記の同じメッソドをコールバックされる。
Public Sub ReceiveCallback(ByVal ar As IAsyncResult)
このメッソドは競合するのでしょうか?しないのでしょうか?

宜しくお願いします。
デリゲートで指定しているメソッドが共有メソッド(Shared又はモジュール内のメソッド)
ならば競合しますし、インスタンスメソッドを指定すれば各インスタンス固有になります。
有難う御座います。
共有・固有は通常のメッソドと同じに考えればいいのですね、有難う御座いました。

先にあげた例ではNew AsyncCallback(AddressOf ReceiveCallback)と新しくインスタンスを作って指定しているので固有に作動する事になりますね。
しかし新しいインスタンスメソッドから更に何気にメソッドを呼び出すと共有問題が発生する事になりエンドレスのLOCK、LOCK、LOCK、に成りそうですね。何かよい方法があればいいのですが。

DOBON.NET | プログラミング道 | プログラミング掲示板