我有一個方法將某些工作排隊以異步執行。我想返回調用者的某種句柄,可以輪詢,等待或用於從操作中獲取返回值,但找不到適合該任務的類或接口。返回給調用者的異步結果句柄
BackgroundWorker靠近了,但它適用於工作人員擁有自己的專用線程的情況,這在我的情況中並非如此。 IAsyncResult看起來很有前途,但提供的AsyncResult實現對我來說也是無法使用的。我應該自己實現IAsyncResult嗎?
澄清:
我有一個類,概念上看起來是這樣的:
class AsyncScheduler
{
private List<object> _workList = new List<object>();
private bool _finished = false;
public SomeHandle QueueAsyncWork(object workObject)
{
// simplified for the sake of example
_workList.Add(workObject);
return SomeHandle;
}
private void WorkThread()
{
// simplified for the sake of example
while (!_finished)
{
foreach (object workObject in _workList)
{
if (!workObject.IsFinished)
{
workObject.DoSomeWork();
}
}
Thread.Sleep(1000);
}
}
}
的QueueAsyncWork函數把一個工作項目到輪詢名單有專門的工作線程,其中將有隻有一個。我的問題不在於編寫QueueAsyncWork函數 - 這很好。我的問題是,我會返回給調用者的是什麼? SomeHandle
應該是什麼?
現有的.Net類適用於異步操作可封裝在返回的單個方法調用中的情況。情況並非如此 - 所有工作對象都在同一個線程上工作,而完整的工作操作可能會跨越多次調用workObject.DoSomeWork()
。在這種情況下,向調用者提供進度通知,完成和獲得操作的最終結果的一些處理的合理方法是什麼?
'提供的AsyncResult實現對我來說也是無法使用的'...你能解釋一下嗎? – 2009-08-14 04:24:11
我明白你的意思了。試圖想出更好的答案。我認爲在DoSomeWork裏面你有一些關於任務進展的概念? – 2009-08-17 18:51:21
出於好奇,爲什麼你的所有工作方法都必須在同一個線程上運行?我做了很多異步工作,而且我之前沒有看到過這個要求。 – 2009-08-17 19:00:20