Хотел бы попробовать использовать AsyncCTP с TFS. В настоящее время есть долгосрочный метод, который вызывает RunQuery для экземпляра TFS Query.
Запрос предоставляет доступ к методам APM BeginQuery () и EndQuery (). Насколько я понимаю, рекомендуемый подход для их обертывания с использованием AsyncCTP выглядит примерно так: (пример из документации)
Task<int>.Factory.FromAsync(stream.BeginRead, stream.EndRead, buffer, offset, count, null);
Далее, оберните его в метод расширения, как в документации, поэтому мой фактический метод выглядит так:
public static Task<WorkItemCollection> RunQueryAsync(this Query query)
{
if (query== null)
throw new ArgumentNullException("Query");
return Task<WorkItemCollection>.Factory.FromAsync(query.BeginQuery, query.EndQuery, null);
}
... но это не скомпилировать. Получение ошибки intellisense "неверный аргумент", которую, честно говоря, я не могу понять, потому что типы и формат выглядят правильно. Одной из возможных проблем может быть то, что методы Query APM ожидают ICanceleableAsyncResult, тогда как фабрика задач ожидает IAsyncResult - но, глядя на API TFS, ICanceleableAsyncResult является специализацией IAsyncResult.
Не уверен, делаю ли я это неправильно или это просто невозможно. Хотелось бы сделать это AsyncCTP, но, возможно, придется вернуться к шаблону APM - тьфу!