ファイルのダウンロード ステータスを表示するコンポーネントを作成しています。コンポーネントのメソッドにアクセスし、画面に表示する必要がある情報をさらに含むパラメーターを渡すアプリケーションがあります。
そのサービスは、大量のファイル (現在ダウンロード キューにある) の情報を提供する必要があるため、非常に頻繁に私のメソッドにアクセスします。
private void ProcessMessage(MessageOptions options)
{
Task t= Task.Factory.StartNew(()=>
{
//update data row using options object
});
Task t1 = t.ContinueWith((continution) =>
{
//here goes the code to update the MainUI
}
,TaskScheduler.FromCurrentSynchronizationContext());
}
したがって、これは私が必要とするすべてを行い、今までこのアプローチで実際的な問題に直面したことはありません. しかし、この方法には潜在的な問題があります。このメソッドは引き続き呼び出されるため、このようなことが起こる可能性があります
呼び出し 1 options.FileName="ファイル 1" options.DataTransferred="3 mb"
呼び出し 2 options.FileName="ファイル 2" options.DataTransferred="6 mb"
3 つの options.FileName="ファイル 1" options.DataTransferred="6 mb" を呼び出します
等々。そして、このメソッドが呼び出されるたびに、新しいタスクが初期化され、タスクが完了すると、情報で MainUI が更新されます。
問題
どのタスクが最初に完了するという保証はありません。Call3 が最初に完了し、ファイル 1 が 6 MB でダウンロードされたという情報が表示され、次に Call1 が完了して、ファイル 1 が 3 MB でダウンロードされたという情報が更新される可能性がありますが、これは絶対に受け入れられません。
これらのタスクは両方ともファイル 1 の情報を取得しているため、タスク 1 はタスク 3 の前に終了する必要があることを確認したいと思います。
ありがとう