Я заметил, что когда await
находится в методе, который я запускаю, и забыл, что приложение сделает его только до await
, тогда оно будет действовать, как если бы оно достигло return
.В упрощенной версии того, что я сейчас смотрю, у вас может быть:
public void DoTheThing() {
...
Task fireAndForget = SendAsync(emails);
}
public async Task SendAsync(List<Email> emails) {
foreach (var email in emails) {
var to = email.to;
var body = email.body;
await EmailSenderAsync(to,body);
await Task.Delay(3000);
}
}
Это никогда не пройдет через строку await EmailSenderAsync(to,body);
, и будет отправлено только самое первое письмо в emails
.EmailSenderAsync
- это внешний код, поэтому я не могу войти в него.Добавление await к SendAsync(emails)
заставит все работать нормально ... но тогда это не огонь и забудь.
Я понимаю, что это, вероятно, не лучшее решение для данной конкретной ситуации.Я больше хочу понять, почему это не помогает, и какой шаблон вы можете использовать, чтобы заставить async
функционировать в пожаре и забыть о работе по назначению.