Thread
から非静的メソッドにアクセスできるようにするのは1つだけですobject
。私は実際にはスレッドを作成しませんが、代わりにタスクを使用します。メソッドを1つの使用法にロックしようとしましたが、機能していません。最初に静的オブジェクトで試しMutex
、次に非静的オブジェクトで試しましMutex
たが、単純なモニターでも機能しません。
私のコード:
private async void LoadLinkPreview()
{
try
{
// TODO: FEHLERTRÄCHTIG!
Monitor.Enter(_loadLinkMonitor);
Debug.WriteLine(DateTime.Now + ": Entered LinkPreview");
// Code ...
// There are also "await" usages here, don't know if this matters
}
catch { }
finally
{
Monitor.Exit(_loadLinkMonitor);
Debug.WriteLine(DateTime.Now + ": Left LinkPreview");
}
}
これがコンソールに表示されるものです。
3/12/2013 6:10:03 PM: Entered LinkPreview
3/12/2013 6:10:05 PM: Entered LinkPreview
3/12/2013 6:10:05 PM: Left LinkPreview
3/12/2013 6:10:06 PM: Left LinkPreview
もちろん、希望どおりに動作することもありますが、常に動作させたいと思います。誰かが私を助けることができますか?
編集:「左」WriteLine()
はモニターを終了した後なので、コンソールディスプレイが望ましい動作である可能性があることに気付きましたが、今すぐ切り替えて、2つのスレッドが同時に動作していることを確認できます!また、より明白なコンソール結果:
3/12/2013 6:26:15 PM: Entered LinkPreview
3/12/2013 6:26:15 PM: Entered LinkPreview
2 had an error! // Every time the method is used I count up now, this confirms that the second
// time the method is called the error is produced, which would not happen if the monitor
// is working because I have an if statement right upfront ...
3/12/2013 6:26:17 PM: Left LinkPreview
3/12/2013 6:26:18 PM: Left LinkPreview