如何异步运行我的几行代码

时间:2017-02-27 09:05:53

标签: c# winforms asynchronous task-parallel-library

我试图异步发送邮件,但我没有使用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之后的代码不应被阻止。

1 个答案:

答案 0 :(得分:1)

Parallel.Invoke将并行地运行您传递给它的各种动作,但会阻塞直到所有动作完成。

例如,你可以这样做:

Parallel.Invoke(() => Console.WriteLine("Whaddup"), () => Console.WriteLine("Dawg"));

Console.WriteLine("Fo shizzle");

这将同时执行这两个命令,但是在完成其他两个命令之前它不会写“Fo shizzle”,无论它们完成的顺序如何。

正如@MatthewWatson所说,使用Task.Run代替,它将在一个单独的线程中触发你的动作,并且在完成之前不会阻塞。

Parallel.Invoke对于异步执行一系列操作非常有用(相互之间),但它本身不是异步方法。