«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Async/ожидание использования: задача или пустота?

Async/ожидание использования: задача или пустота?

Опубликовано в 2025-04-15
Просматривать:666

Async/Await: Should I Return a Task or Void?

возвращаемое значение метода 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 . Это гарантирует, что исключение обрабатывается правильно и что вызывающий вызывающий может выбрать ждать задачу и отслеживать его прогресс. ]

для получения более подробной информации, пожалуйста, обратитесь к документации Microsoft на

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