2015-06-24 2 views
0

Я только начинаю с разработки C#, и я всегда боролся с асинхронным программированием, у меня есть сомнения в выполнении задачи асинхронно.C# async task with no await statement

У меня есть собственная служба, способная отправлять электронную почту (не вдаваясь в подробности, кроме ее работы), и я хочу, чтобы выполнение этого метода выполнялось несинхронно, я читал в msdn документации об async и ожидал.

Я хочу отправить его асинхронно, но я не забочусь о результатах, я имею в виду, что я не хочу указывать утверждение ожидания. Я собирался попробовать Whithout, когда я прочитал из документации

Если метод асинхронный не использует оператор ОЖИДАНИЯ, чтобы отметить точку подвеса, метод выполняется как синхронный метод делает, несмотря на модификатор асинхронного.

Так что сомневаетесь, так ли это? есть способ добиться того, что я ищу, или это плохое мышление/идея мышления, делая что-то подобное. Надеюсь, я сделал свое ясное. Благодаря

+1

'Task.Run (() => MethodToFireAndForget());' –

+1

Для ASP.NET см. Http://stackoverflow.com/q/18502745 –

+0

http://stackoverflow.com/questions/1018610/simplest -way-дел-а-пожаро-и-забыл-метод-в-с/1018630 ​​# 1018630 – Will

ответ

0

Что касается того, что вы читаете в документации, думать об этом таким образом:

public async Task OuterMethod() 
{ 
    InnerMethod(); 
} 

Вы отметили OuterMethod async, но вы не делаете любое ожидание. Документы просто говорят, что OuterMethod будет работать синхронно, и вы можете просто отметить его void вместо async Task. Однако тот факт, что OuterMethod работает синхронно, не меняет характера InnerMethod; он вполне может быть асинхронным, и если вы его не ожидаете, он будет запускать стиль «пожар-и-забыть», скорее всего, в фоновом потоке.

В вашем конкретном случае InnerMethod будет методом, который отправляет электронное письмо. Если вы уверены, что вас не волнует, что отправка электронной почты будет успешной или неудачной, я бы предложил позвонить , не ожидая.