我尝试使用Task.Run
向服务员发送一些数据,同时做其他事情,事实上它是有效的。
问题是在某些情况下,它可以在几毫秒内被调用两次,并且会产生错误。
那么,避免这种情况的最佳方法是什么?
我使用的代码:
Task.Run(async () =>
{
PostValues();
});
答案 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”,但它可以是描述唯一代码块的任何字符串。