2014-09-03 3 views
1

Я работаю над сервисом, который подключается к Sharepoint для извлечения данных. Я хотел бы сделать это как можно более асинхронным.Могу ли я получить доступ к ExecuteQueryAsync без Silverlight?

Однако, похоже, что Client Components SDKMicrosoft.Sharepoint.Client для использования со стандартным .NET не имеет асинхронной функциональности. Речь идет о функции ExecuteQuery, которая имеет перегрузку ExecuteQueryAsync, но это встречается только в Microsoft.SharePoint.Client.Silverlight.dll или Microsoft.SharePoint.Client.Phone.dll, как указано в documentation.

Есть ли какой-либо способ получить доступ к этой асинхронной функции? Я не уверен, могу ли я просто попробовать использовать Silverlight dll прямо в моем коде, или если это вызовет проблемы позже в будущем. Довольно уверен. Существуют ли какие-либо другие API, которые позволят мне делать то, что я хочу сделать?

+0

Если у вас есть опция сделать это с помощью jquery/javascript, он также доступен в Sp.Js –

+0

@vinayakhegde, что, к сожалению, невозможно. Это нужно сделать с помощью C# API. – Dervall

ответ

0

Вы можете создать оболочку, чтобы сделать эту задачу с помощью асинхронного TaskCompletionSource

Чтобы обернуть эту

public override void ExecuteQueryAsync(
    ClientRequestSucceededEventHandler succeededCallback, 
    ClientRequestFailedEventHandler failedCallback 
) 

Вы бы обеспечить это, как метод расширения:

public static class ClientExtension 
{ 
    public static async Task<bool> ExecuteQueryAsync(this ClientContext ctx) 
    { 
    TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>(); 
    ctx.ExecuteQueryAsync(
     (s, e) => t.SetResult(true), 
     (s, e) => t.SetException(e.Exception)); 
    return tcs.Task; 
    } 
} 

назвать эту , вы можете подать заявку

await client.ExecuteQueryAsync(); 
+1

У вас здесь не вопрос. Это то, что я хотел бы сделать, если бы у меня был API ExecuteQueryAsync вообще. Я не. Вопрос здесь в том, что есть какой-то способ, которым я могу получить любую асинхронную функциональность в модели управляемых объектов. – Dervall

+0

Что такое подпись синхронного вызова API? –