public async void PostTask(MTask task) //用async声明的函数,调用的时候会立即创建线程。 { lock (_taskList) if (task == null || _taskList.Contains(task)) { return; } while (true) { if (_taskList.Count > 500) //允许队列中最多放置多少个任务。 { _taskWaiter.Set(); await Task.Delay(400); } else { lock (_taskList) _taskList.Enqueue(task); Env.Logger.Log($"Enqueue Task{task} runnerCount={_runnerCount}"); _taskWaiter.Set(); //如果成功添加,则退出。 break; } } }
public void PostTask(Func <Task> task, Func <bool> isValid = null, Func <string> toStringImpl = null) { MTask mtask = new MTask { ActualTask = task, IsValidImpl = isValid, ToStringImpl = toStringImpl }; PostTask(mtask); }