假設我有兩個線程。在一個線程中,我正在執行一系列的工作。在另一個線程上,我等待用戶輸入來控制這些作業(即跳到下一個作業)。例如(僞C#):用於處理從另一個線程觸發事件的模式
public class Worker {
public List<Job> Jobs { get; set; }
public Worker(Controller anotherThread) {
anotherThread.SkipJobRequested += OnSkipJobRequested;
}
public DoWork() {
foreach (Job job in Jobs) {
// Do various work...
}
}
// Event that fires on Controller thread
public void OnSkipJobRequsted(Object sender, EventArgs args) {
// Somehow skip to the next job
}
}
我不確定我應該如何處理跳到下一份工作。發生在我身上的一種可能性是在請求跳過時設置一個實例變量(例如,IsSkipRequested
),並在DoWork()
內的各個關鍵點檢查它。
是否存在其他可用於處理此事件的模式?
最好的方法可能取決於工作實際在做什麼。它可以在任何時候終止?每項工作一旦開始就完成了嗎?如果正在進行,是否需要取消優雅作業?等你能提供更多的細節? – 2012-08-03 00:14:04
@RJLohan,一份工作一旦開始就不需要完成 - 它可以在任何時候沒有恩典就終止(儘管恩典可能很好,但沒有必要)。 – Eric 2012-08-03 00:22:31