いくつかのサードパーティAPIを検索するコードがあります。検索条件に基づいて、検索を2つのグループに分けています。各検索は非常にタイムリーであるため、両方の検索を開始しますが、最初の検索グループが一致した場合、2番目の検索グループが終了するのを待ちたくありません。つまり、基本的に私が持っているのは次のとおりです。
Dictionary<string, string> result = null;
NameSearchDelegate nameDel = new NameSearchDelegate(SearchByName);
IAsyncResult nameTag = nameDel.BeginInvoke(name, null, null);
if(!string.IsNullOrWhiteSpace(telNum))
{
result = SearchByTelNum(telNum);//Will return null if a match is not found
}
if(null == result)
{
result = nameDel.EndInvoke(nameTag);
}
//End the delegate to prevent memory leak
//else
//{
// nameDel.EndInvoke(nameTag)
//}
return result;
したがって、一致が見つからない場合に備えてSearchByTelNumを呼び出す前にSearchByNameを開始したいのですが、一致が見つかった場合は、SearchByNameが終了するのを待ってから一致を返す必要はありません。結果が不要になった場合に、そのデリゲートを単に終了またはキャンセルする方法はありますか?