возвращаемое значение метода Async/await: задача или void?
] в асинхронном программировании, будь то возвратное значение Async
Method task
или void
оказывает значительное влияние. В этой статье будут изучены сценарии, которые применяет каждый вариант.
return task
] обычно метод async
должен вернуть task
. Это позволяет коду ждать
быть вызванным и отслеживать его прогресс, если это необходимо. Основным исключением из этого правила является то, что вам явно нужен тип void
return, например, при обработке событий.
return void
отметьте его как «асинхронную операцию верхнего уровня», используя метод void
return Type . Эти операции ведут себя по -разному, когда происходят исключения. В отличие от
task возвращаемого значения, исключения в
void асинхронного метода не наблюдаются по умолчанию. Они становятся нездоровыми исключениями и могут вызвать
taskscheduler.unobservedtaskexception .
]
]
public static async void AsyncMethod2(int num)
{
await Task.Factory.StartNew(() => Thread.Sleep(num));
}
в этом примере async и
wait ключевые слова] не нужны, потому что исключение не обязательно обрабатывается явно. Однако, если происходит исключение, оно не будет наблюдаться и может быть обработано правильно.
]
пример обработки исключений ]]
Чтобы продемонстрировать разницу в обработке исключений между task и
void асинхронные методы, рассмотрите следующий код:
static async void f()
{
await h();
}
static async Task g()
{
await h();
}
static async Task h()
{
throw new NotImplementedException();
}
if f ] вызывается, исключение наблюдается и рассматривается как любое другое невозможное исключение. Однако, если
g ] вызывается, исключение никогда не наблюдается и будет обрабатывается
taskscheduler.unobservedtaskexception , который приведет к неопределенному поведению.
]
лучшие практики ]
как общая лучшая практика, всегда возвращайте task из метода
async , если только вам явно нужен тип
void . Это гарантирует, что исключение обрабатывается правильно и что вызывающий вызывающий может выбрать
ждать задачу и отслеживать его прогресс.
]
async /
watait лучшие практики:
https://learn.microsoft.com/en-us/archive/msdn-magazine/2013/march/async-await-best-practices-in-asynchronous-programming ]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3