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で)行うための最もクリーンな方法は何ですか?