PD: Основываясь на ответе Lucero, вот метод расширения, который скрывает вызовы APM и представляет себя как обычный Task<T>
асинхронный метод:
public static async Task<DirectoryResponse> SendRequestAsync(this LdapConnection conn, string target, string filter,
SearchScope searchScope, params string[] attributeList)
{
if (conn == null)
{
throw new NullReferenceException();
}
var search_request = new SearchRequest(target, filter, searchScope, attributeList);
var response = await Task<DirectoryResponse>.Factory.FromAsync(
conn.BeginSendRequest,
(iar) => conn.EndSendRequest(iar),
search_request,
PartialResultProcessing.NoPartialResultSupport,
null);
return response;
}
Это также может использоваться в качестве отправной точки дляваши собственные потребности (вы можете использовать аналогичный метод, чтобы "заставить" объекты, поддерживающие APM, вести себя в стиле на основе задач).