我有一个方法将某些工作排队以异步执行。我想返回调用者的某种句柄,可以轮询,等待或用于从操作中获取返回值,但找不到适合该任务的类或接口。返回给调用者的异步结果句柄
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