我可以在没有Silverlight的情况下访问ExecuteQueryAsync吗
本文关键字:情况下 访问 ExecuteQueryAsync Silverlight 我可以 | 更新日期: 2023-09-27 18:20:37
我正在开发一个连接到Sharepoint以检索数据的服务。我想让它尽可能异步。
但是,与标准.NET一起使用的客户端组件SDK Microsoft.Sharepoint.Client
似乎没有任何异步功能。ExecuteQuery
函数就是一个很好的例子,它确实有一个重载ExecuteQueryAsync
,但正如文档所述,它只能在Microsoft.SharePoint.Client.Silverlight.dll
或Microsoft.SharePoint.Client.Phone.dll
中找到。
有什么方法可以访问这种异步功能吗?我不确定我是否可以直接在代码中使用Silverlight dll,或者这是否会在以后引起问题。很肯定会的。有没有其他API可以让我做我想做的事情?
您可以创建一个包装器,使用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();
我一直在寻找相同的方法,但我只找到了一个扩展方法https://www.codeproject.com/articles/738008/programming-efficiently-with-the-sharepoint-client#async
public static class CSOMExtensions
{
public static Task ExecuteQueryAsync(this ClientContext clientContext)
{
return Task.Factory.StartNew(() =>
{
clientContext.ExecuteQuery();
});
}
}
SharePoint Online CSOM程序集现已更新为包含ExecuteQueryAsync。然而,《现场直播》(2013年、2016年或2019年)没有。
我有一个包含ExecuteQueryAsync实现的公共要点:https://gist.github.com/johnnycardy/9e1671cf5087dcd8f4e7892fc3c2cfb8
然后,您可以执行await CSOM15ExecuteAsync(clientContext);
,而不是调用clientContext.ExecuteQuery()
。