避免Task.Run同时运行两次相同的方法

时间:2018-02-04 15:02:59

标签: c# asynchronous

我尝试使用Task.Run向服务员发送一些数据,同时做其他事情,事实上它是有效的。 问题是在某些情况下,它可以在几毫秒内被调用两次,并且会产生错误。 那么,避免这种情况的最佳方法是什么?

我使用的代码:

Task.Run(async () =>
        {
            PostValues();               
        });

1 个答案:

答案 0 :(得分:0)

维护您已启动的任务的字典(通过为其命名)并在任务完成时将其删除。字典应该是线程安全的(所以不是内置的Dictionary类,而是来自http://www.philippiercedeveloper.com/wp-content/uploads/2009/08/Threaded.zip

的TDictionary

结果代码看起来像这样;

TDictionary<string, DateTime> runningCode = new TDictionary<string,DateTime>();

...

    if(runningCode.AddIfNotExists("MyCodeDescriptor", DateTime.Now()))
    {
       Task.Run(async() => 
       {
           PostValues();
           runningCode.Remove("MyCodeDescriptor");
       });
    }

这意味着您需要为要执行的代码提供某种monikor,以便您可以唯一地识别它。我使用了“MyCodeDescriptor”,但它可以是描述唯一代码块的任何字符串。