我试图异步发送邮件,但我没有使用asycn邮件,而是我在调试代码时使用Parallel.Invoke(() => {})
然后我就不是异步,因为我的下一个像Parallel.Invoke
之后是块单位邮件没有发送。
Parallel.Invoke(() =>
{
var template = new MailTemplate()
.WithBody("my sample body")
.WithSubject("sample sub")
.WithSender("test1@fakesite.com")
.WithRecepient("test2@fakesite.com")
.WithAttachment(filepath)
.Send();
});
oLog.Save("no of job sone " + jbcount, false);
我想承认我的邮件发送例程不是异步但我使用Parallel.Invoke
以异步方式调用这些行,但是当我调试时,我看到oLog.Save
在发送邮件之前没有调用。
请告诉我如何异步运行几行代码,因此Parallel.Invoke
之后的代码不应被阻止。
答案 0 :(得分:1)
Parallel.Invoke将并行地运行您传递给它的各种动作,但会阻塞直到所有动作完成。
例如,你可以这样做:
Parallel.Invoke(() => Console.WriteLine("Whaddup"), () => Console.WriteLine("Dawg"));
Console.WriteLine("Fo shizzle");
这将同时执行这两个命令,但是在完成其他两个命令之前它不会写“Fo shizzle”,无论它们完成的顺序如何。
正如@MatthewWatson所说,使用Task.Run代替,它将在一个单独的线程中触发你的动作,并且在完成之前不会阻塞。
Parallel.Invoke对于异步执行一系列操作非常有用(相互之间),但它本身不是异步方法。