我正在编写一个显示文件下载状态的组件。有一个应用程序可以访问我的组件的方法并传递进一步包含我需要在屏幕上显示的信息的参数。
因此该服务非常频繁地访问我的方法,因为它需要为我提供大量文件的信息(当前正在下载队列中)
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="File 2" options.DataTransferred="6 mb"
调用 3 options.FileName="File 1" options.DataTransferred="6 mb"
等等。每次调用此方法时,都会初始化一个新任务,当任务完成时,它会使用信息更新 MainUI。
问题
无法保证哪个任务将首先完成。有可能Call3先完成并显示文件1已下载6mb的信息,然后Call1完成并更新文件1已下载3mb的信息,这绝对不能接受。
我想确保任务 1 必须在任务 3 之前完成,因为这两个任务都获得了文件 1 的信息。
谢谢