0

ファイルのダウンロード ステータスを表示するコンポーネントを作成しています。コンポーネントのメソッドにアクセスし、画面に表示する必要がある情報をさらに含むパラメーターを渡すアプリケーションがあります。

そのサービスは、大量のファイル (現在ダウンロード キューにある) の情報を提供する必要があるため、非常に頻繁に私のメソッドにアクセスします。

 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 の前に終了する必要があることを確認したいと思います。

ありがとう

4

2 に答える 2