C# 检查任务状态

C# Check Task status

我使用一分钟计时器创建任务,该任务每次都调用相同的过程但具有一些参数值(不同但可能与某些 prevoius 相同)并且我想在创建任务之前检查是否存在任何调用过程的任务当前参数值。如果没有则创建任务,如果是则什么也不做(等待完成任务)。

在计时器中:

// Check if exist Task called MyProcedure with current myParameter value.
// If NO then

   Task task = new Task(() => { MyProcedure(myParameter); });
   task.Start();

// else nothing

类似于:

private readonly ConcurrentDictionary<SomeType, Task> _tasks = new();

Task DoTheThing(SomeType value) => _tasks.GetOrAdd(value,
    static myParameter => Task.Run(() => MyProcedure(myParameter))); 


验证某个方法是否被调用并不是那么容易。 但是您要做的是处理您创建的任务列表。

// create a list of type Task
List<Task> tasks = new List<Task>();
    
// run the Task and add it to your list
tasks.Add(Task.Run(() => Method()));        
    
    // exmaple: get the recently added task
var t = tasks[tasks.Count - 1];
            
if (t.IsCompleted == false){
    Console.WriteLine("task is running");
}
    
t.Wait(); // wait for this explicit task
if (t.IsCompleted){
    Console.WriteLine("task is comleted");
}