Мне нужно отправить несколько HTTP-вызовов (httpclient.SendAsync()) из синхронного метода (не может быть асинхронным!) параллельно, а затем дождаться их всех. Еще одно требование: я должен индивидуально обрабатывать исключения. Это означает, что я должен знать, какая задача вызвала какое исключение, чтобы правильно их отсортировать.
Мое решение на данный момент:
var listOfRequests = new List()
{1,2,3,4,5,6,7,8};
var tasks = new Dictionary();
//start all tasks
foreach (var curr in listOfRequests)
{
tasks.Add(curr.Key, httpclient.GetSomeDataFromEndpoint(curr));
}
//wait for all tasks to complete
foreach (var currTask in tasks)
{
try
{
currTask.Value.Wait();
}
catch (Exception ex)
{
//handle individual exception
}
}
Я знаю, это не лучшая практика, но как мне добиться этого с помощью Task.WhenAll()?
Мне пришла в голову эта идея, но она тоже выглядит не слишком здорово...
try
{
// Wait for all tasks to complete synchronously
Task.WhenAll(tasks.Values).Wait();
}
catch (Exception ex)
{
//do nothing, because exceptions are handled below
}
foreach (var task in tasks)
{
if (task.Value.IsCompletedSuccessfully)
{
Console.WriteLine($"Success: {task.Key} - Status: {task.Value.IsCompleted}");
}
else if (task.Value.IsFaulted)
{
Console.WriteLine($"Exception: {task.Key} - Message: {task.Value.Exception}");
}
else
{
//maybe task was cancelled
}
}
Я не могу использовать await, потому что включающий метод ДОЛЖЕН БЫТЬ синхронным!
Я думал, что все задачи уже запущены, когда Я добавляю их в словарь (как я видел на https://learn.microsoft.com/en-us/dotne ... o-complete), но кажется, что мои HTTP-вызовы отправляются в API последовательно (я вижу это в журнале API), поэтому я подумал, что, возможно, что-то с моим клиентским кодом и тем, как я ожидаю выполнения этих задач, может быть неправильным...
Мне нужно отправить несколько HTTP-вызовов (httpclient.SendAsync()) из синхронного метода (не может быть асинхронным!) параллельно, а затем дождаться их всех. Еще одно требование: я должен индивидуально обрабатывать исключения. Это означает, что я должен знать, какая задача вызвала какое исключение, чтобы правильно их отсортировать. Мое решение на данный момент: [code]var listOfRequests = new List() {1,2,3,4,5,6,7,8};
var tasks = new Dictionary();
//start all tasks foreach (var curr in listOfRequests) { tasks.Add(curr.Key, httpclient.GetSomeDataFromEndpoint(curr)); }
//wait for all tasks to complete foreach (var currTask in tasks) { try { currTask.Value.Wait(); } catch (Exception ex) { //handle individual exception } } [/code] Я знаю, это не лучшая практика, но как мне добиться этого с помощью Task.WhenAll()? Мне пришла в голову эта идея, но она тоже выглядит не слишком здорово... [code]try { // Wait for all tasks to complete synchronously Task.WhenAll(tasks.Values).Wait(); } catch (Exception ex) { //do nothing, because exceptions are handled below } foreach (var task in tasks) { if (task.Value.IsCompletedSuccessfully) { Console.WriteLine($"Success: {task.Key} - Status: {task.Value.IsCompleted}"); } else if (task.Value.IsFaulted) { Console.WriteLine($"Exception: {task.Key} - Message: {task.Value.Exception}"); } else { //maybe task was cancelled } } [/code] [list] [*]Я не могу использовать await, потому что включающий метод ДОЛЖЕН БЫТЬ синхронным! [*]Я думал, что все задачи уже запущены, когда Я добавляю их в словарь (как я видел на https://learn.microsoft.com/en-us/dotnet/csharp/asynchronous-programming/async-scenarios#wait-for-multiple-tasks-to-complete), но кажется, что мои HTTP-вызовы отправляются в API последовательно (я вижу это в журнале API), поэтому я подумал, что, возможно, что-то с моим клиентским кодом и тем, как я ожидаю выполнения этих задач, может быть неправильным... [/list] Заранее спасибо!!!
Мне нужно отправить несколько HTTP-вызовов ( httpclient.SendAsync() ) из синхронного метода (не может быть асинхронным!) параллельно, а затем дождитесь их всех. Еще одно требование: я должен индивидуально обрабатывать исключения. Это означает, что я...
Мне нужно отправить несколько HTTP-вызовов ( httpclient.SendAsync() ) из синхронного метода (не может быть асинхронным!) параллельно, а затем дождитесь их всех. Еще одно требование: я должен индивидуально обрабатывать исключения. Это означает, что я...
Мне нужно отправить несколько HTTP-вызовов ( httpclient.SendAsync() ) из синхронного метода (не может быть асинхронным!) параллельно, а затем дождитесь их всех. Еще одно требование: я должен индивидуально обрабатывать исключения. Это означает, что я...
Мне нужно отправить несколько HTTP-вызовов ( httpclient.SendAsync() ) из синхронного метода (не может быть асинхронным!) параллельно, а затем дождитесь их всех. Еще одно требование: я должен индивидуально обрабатывать исключения. Это означает, что я...
версия Python 3.9, версия Fastapi 0.78.0
У меня есть пользовательская функция, которую я использую для обработки исключений приложения. Когда запросы сталкиваются с проблемами внутренней логики, то есть я хочу отправить HTTP -ответ 400 по какой -то...