たとえば、ファイルがフォルダに追加されるたびにイベント通知が発生します(これは私の場合ではなく、の説明に過ぎません)。注文のプロセスタスク
フォルダに追加されるファイルの数はいくつでもかまいませんが、そこにいくつのファイルがあるかはわかりません。
は現在、私のイベントmyEvent_Handlerファイルが上記のイベントハンドラで問題がところででマークされた行の競合状態である
private void myEvent_Handler(object sender, SomeEvent e)
{
// I dont know how many times this event will fire
if (something == true) (1)
{
var t = Task.Run(() =>
{
DoSomething(e); (2)
});
}
}
が追加されるたびに発射(1)及び(2)。例えば、イベントは、4回焼成される。
- 、(2)実行するタスクにキューイングされている(1)が真である
- (1)、(2)にタスクに真のキューイングされています実行
- 、(2)を実行するタスクにキューイングされた(1)真である
- 、(2)タスクキューがあり、今
を実行するタスクにキューイングされた(1)真であります実行するタスクは4つですが、これらは同じ順序で実行されません。 3> 2-> 4-> 1の順番で実行できますが、UIスレッドをブロックせずに1-> 2-> 3-> 4のように実行する必要があります。
UIスレッドをブロックせずにこれを実現するにはどうすればよいですか?
タスクのキューのような音 – stuartd
は、キューで長い実行中のタスクを使用できるように聞こえます。解決策を見てください:http://stackoverflow.com/questions/2293976/how-and-if-to-write-a-single-consumer-queue-using-the-tpl – muratgu
[Queue](https:// msdn.microsoft.com/en-us/library/system.collections.queue(v=vs.110).aspx)または多分[スレッドセーフキュー](http://stackoverflow.com/questions/13416889/thread-safe -queue-enqueue-dequeue)? –