Có một quy trình được thực thi trong một tác vụ. Tôi không muốn nhiều hơn một trong số này để thực hiện đồng thời.Kiểm tra xem tác vụ đã chạy chưa trước khi bắt đầu mới
Đây có phải là cách chính xác để kiểm tra xem tác vụ đã chạy chưa?
private Task task;
public void StartTask()
{
if (task != null && (task.Status == TaskStatus.Running || task.Status == TaskStatus.WaitingToRun || task.Status == TaskStatus.WaitingForActivation))
{
Logger.Log("Task has attempted to start while already running");
}
else
{
Logger.Log("Task has began");
task = Task.Factory.StartNew(() =>
{
// Stuff
});
}
}
Hãy xem xét sử dụng 'Task.IsCompleted' - nhưng hãy nhớ rằng có sẽ luôn là một điều kiện chủng tộc ở đây. Nếu tác vụ hoàn thành * chỉ * sau khi bạn kiểm tra, bạn sẽ không chạy nó một lần nữa - có được không? Hay bạn * thực sự * muốn bắt đầu một nhiệm vụ thứ hai ngay sau khi nhiệm vụ đầu tiên kết thúc? –
Ah, tôi không thấy 'Task.IsComplete'. Có, điều kiện chủng tộc không phải là một vấn đề. Cảm ơn và cảm thấy tự do để tạo ra một câu trả lời. – davenewza
@davenewza, bạn có thể muốn xem [Mẫu để tự hủy và khởi động lại tác vụ] (http://stackoverflow.com/questions/18999827/a-pattern-for-self-cancelling-and-restarting-task) – Noseratio