我通常把能(現實)不會超過一兩秒鐘到一個單獨的任務的任何行動,是這樣的:
public interface ITask
{
void ExecuteTask (ITaskExecutionContext context);
void AfterSuccess(ITaskExecutionContext context);
void AfterFailure(ITaskExecutionContext context);
void AfterAbortion(ITaskExecutionContext context);
}
我也有運行這樣的任務的抽象:
public interface ITaskExecutor : IDisposable
{
void BeginTask(ITask task);
void TellTaskToStop();
}
一個本ITaskExecutor
的實施方式的使用BackgroundWorker
:
public class BackgroundTaskExecutor : ITaskExecutor
{
public void BeginTask(ITask task)
{
this.task = task;
worker = new BackgroundWorker();
worker.DoWork += WorkerDoWork;
worker.RunWorkerCompleted += WorkerRunWorkerCompleted;
worker.WorkerSupportsCancellation = true;
worker.RunWorkerAsync();
}
...
}
我非常依賴依賴注入和IoC來將東西連接在一起。在主持人然後我就打電話是這樣的:
GoAndDontReturnUntilYouBringMeALotOfMoneyTask task = new GoAndDontReturnUntilYouBringMeALotOfMoneyTask(parameters);
taskExecutor.BeginTask(task);
取消/放棄然後按鈕連線讓他們告訴任務執行/任務中止。
它實際上比這裏介紹的要複雜一點,但這是一般的想法。
在這裏看到沒有真正的參與感到驚訝。我也會對此感興趣。 – Houman 2009-12-17 12:12:37