我有一个使用的BeginXXX EndXxx异步模式库(显然,下面的代码是简化):异步函数进行异步调用
ILibrary
{
IAsyncResult BeginAction(string name, AsyncCallback callback, object state);
int EndAction(IAsyncResult asyncResult, out object state)
}
我试图建立一个使用该库类,和实现了相同的模式本身:
Manager
{
private ILibrary library;
public IAsyncResult BeginMultipleActions(IEnumerable<string> names,
AsyncCallback callback, object state)
{
var handles = new List<IAsyncResult>();
foreach(string name in names)
{
var handle = library.BeginAction(name, OnSingleActionCompleted, null);
handles.Add(handle);
}
//???
}
public int EndMultipleActions(IAsyncResult asyncResult, out object state)
{
//???
}
private void OnSingleActionCompleted(IAsyncResult asyncResult)
{
//???
}
}
我已经试过了几个解决方案(使用ManualResetEvent的),但我发现我的代码非常难看。什么是最干净的方法(在C#3.5中)而不会丢失功能(回调,等待句柄,...)?
如果你可以使用.NET 4,你可以使用带ContinueWith和Wait *方法的TPL – oleksii
不幸的是,我被3.5和I不能使用Reactive Extensions – Luk