我有一个使用 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 中)?