执行异步任务在控制台应用程序中工作,但不在WinForms应用程序上

时间:2017-10-11 05:02:30

标签: c# winforms async-await

我有一个控制台应用程序,工作正常。片段:

//  do something
Execute(args, args...)
//  check response...

static async Task Execute(args, args...)
{
    // do stuff
    response = await client.SendEmailAsync(msg);
}

但是,当我将此代码移动到WinForms应用程序时,它会阻止主线程并且永远不会完成。

有没有简单的方法可以解决这个问题?

...谢谢

1 个答案:

答案 0 :(得分:0)

我通过更多研究得出结论。 Winforms app在处理异步调用的方式上似乎与控制台应用程序有很大不同。而不是

async Task TaskName()
{
    await AsyncMethod
} 

这是有用的:

    private async Task<T> TaskName(args, args, args...)
    {
        return await Task<T>.Run(async () =>
        {
            // code here with await call to async method
        });
    }