Как асинхронно выполнить рабочий процесс MSCRM в C#

#c# #asynchronous #dynamics-crm #workflow

#c# #асинхронный #динамика-crm #рабочий процесс

Вопрос:

Ниже приведен мой C# фрагмент, который запускает a mscrm workflow .

 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 amp;amp; response.Results.Count > 0)
    {
        return;
    }
}
  

Могу ли я узнать, как я могу изменить приведенное выше выполнение на выполнение с sync на async , не дожидаясь ответа перед выполнением следующего запроса?

Спасибо.

Комментарии:

1. Task.Run(() => GenerateWorkflow(...)); Отдельно отметим, что оператор if не имеет смысла в его нынешнем виде

Ответ №1:

Для запуска GenerateWorkflow в отдельном потоке threadpool. Вы можете вызвать Task.Run

Ставит указанную работу в очередь для выполнения в пуле потоков и возвращает задачу или Task<TResult> дескриптор для этой работы.

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

Если у вас было несколько запросов, которые вы хотели выполнить одновременно, и вы хотели дождаться их завершения, вы могли бы использовать Task.WhenAll .

Создает задачу, которая завершится после завершения всех поставленных задач.

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

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

...

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

Комментарии:

1. Спасибо @Общее. Могу ли я узнать GenerateWorkflow , может ли задача выполняться несколько раз с Task.Run() помощью? Таким образом, у меня будет GenerateWorkflow выполняться несколько запросов одновременно, не требуя выполнения одного, за которым следует другой.

2. Это зависит от API, но да, что касается c #, все в порядке

Ответ №2:

попробуйте этот класс: «ExecuteAsyncRequest». Передайте экземпляр этого класса методу Execute, который возвращает экземпляр ExecuteAsyncResponse . точно так же: сервис.ExecuteAsyncRequest(запрос);