【问题标题】:How to Execute MSCRM Workflow Asynchronously in C#如何在 C# 中异步执行 MSCRM 工作流
【发布时间】:2021-02-08 09:35:19
【问题描述】:

下面是我的C#sn-p,它触发了mscrmworkflow

public void GenerateWorkflow(string selectedIDs, IOrganizationService service)
{
    var request = new OrganizationRequest()
    {
        RequestName = "GenerateWorkflow",
    };
    request.Parameters.Add("SelectedIDs", selectedIDs);

    var response = service.Execute(request);
    if (response.Results != null && response.Results.Count > 0)
    {
        return;
    }
}

我可以知道如何将上述执行从sync 更改为async,而不必在执行下一个请求之前等待响应?

谢谢。

【问题讨论】:

  • Task.Run(() => GenerateWorkflow(...)); 在单独的说明中,if 语句没有任何意义

标签: c# asynchronous dynamics-crm workflow


【解决方案1】:

在单独的线程池线程上运行GenerateWorkflow。您可以拨打Task.Run

将指定的工作排入队列以在 ThreadPool 上运行并返回一个任务 或 Task<TResult> 处理该工作。

Task.Run(() => GenerateWorkflow(...)); 

如果您想要同时运行多个请求,并且想要等待它们全部完成,您可以使用Task.WhenAll

创建一个将在所有提供的任务都完成时完成的任务 完成。

var task1 = Task.Run(() => GenerateWorkflow1(...)); 

var task2 = Task.Run(() => SomethingElse(...)); 

...

await Task.WhenAll(task1,task2,...);

【讨论】:

  • 谢谢@将军。请问GenerateWorkflow任务是否可以用Task.Run()多次执行?因此,我将同时执行多个GenerateWorkflow的请求,而不需要一个完成,然后另一个。
  • 这取决于 api,但就 c# 而言是可以的
【解决方案2】:

试试这个类:“ExecuteAsyncRequest”。 将此类的实例传递给 Execute 方法,该方法返回 ExecuteAsyncResponse 的实例。 就像这样:service.ExecuteAsyncRequest(request);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-02
    • 2014-08-08
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 2020-10-29
    • 1970-01-01
    相关资源
    最近更新 更多