C# 没有Silverlight我可以访问ExecuteQueryAsync吗?

C# 没有Silverlight我可以访问ExecuteQueryAsync吗?,c#,silverlight,sharepoint,C#,Silverlight,Sharepoint,我正在开发一个连接到Sharepoint以检索数据的服务。我希望尽可能使其异步 但是,与标准.NET一起使用的Microsoft.Sharepoint.Client似乎没有任何异步功能。典型的例子是ExecuteQuery函数,它确实有一个重载ExecuteQueryAsync,但它只在Microsoft.SharePoint.Client.Silverlight.dll或Microsoft.SharePoint.Client.Phone.dll中找到 有没有办法以某种方式访问此异步功能?我不确

我正在开发一个连接到Sharepoint以检索数据的服务。我希望尽可能使其异步

但是,与标准.NET一起使用的
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;
  }
}

我也在寻找同样的方法,我发现的只是一个扩展方法


SharePoint Online CSOM程序集现已更新为包含ExecuteQueryAsync。但是,没有一个适用于内部部署(2013年、2016年或2019年)

我有一个包含ExecuteQueryAsync实现的公共要点:


然后,不用调用
clientContext.ExecuteQuery()
,您可以执行
wait CSOM15ExecuteAsync(clientContext)

如果您有使用jquery/javascript进行操作的选项,它也可以在Sp中使用。Js@vinayakhegde不幸的是,这是不可能的。这必须用C#API来完成。你错过了这个问题。如果API中有可用的
ExecuteQueryAsync
,我就会这样做。我不。这里的问题是,是否有某种方法可以在托管对象模型中获得任何异步功能。同步API调用的签名是什么?这是我写的一篇文章的链接。我已经创建了一个新版本。以上只是将执行移到一个新的线程,这对于桌面应用程序将执行移出UI线程是很好的。这对web应用程序没有好处。看看我的答案,了解最新情况。
await client.ExecuteQueryAsync();
public static class CSOMExtensions
{
    public static Task ExecuteQueryAsync(this ClientContext clientContext)
    {
        return Task.Factory.StartNew(() =>
        {
            clientContext.ExecuteQuery();
        });
    }
}