不等待异步方法调用,可以吗?

13

我有一个应用程序,可以上传文件。我不想在文件上传期间使我的应用程序停止,因此我希望异步执行该任务。我有类似这样的代码:

class Program
{
    static void Main(string[] args)
    {
        //less than 5 seconds
        PrepareUpload();
    }

    private static async Task PrepareUpload()
    {
        //processing

        await Upload();

        //processing
    }

    private static Task Upload()
    {
        var task = Task.Factory.StartNew(() => System.Threading.Thread.Sleep(5000));

        return task;
    }
}

异常已在内部处理,因此这不是一个问题。

像这样使用异步/等待是否可以像射击和忘记一样?


1
是的。如果你不需要等待,就不要等待。 - SimpleVar
这不是一个不好的做法吗? - Bruno Klein
1
这太基础了,不能被视为练习。这是一个操作,根据特定上下文中的需要,您可能会或不会使用它。 - SimpleVar
1个回答

12
在控制台应用程序中,你必须等待。否则,你的应用程序将退出,终止所有正在进行的后台线程和异步操作。

这只是逻辑的一个示例,实际代码是一个窗体应用程序,在上传后不会结束。 - Bruno Klein
在这种情况下,如果你确定想要这样做,那么进行fire-and-forget是可以的。在我看来,使用await同样容易。 - Stephen Cleary
但是等待它会使应用程序挂起,直到上传完成,对吧? - Bruno Klein
6
不。await 是“异步等待”。该方法会等待它完成,但UI线程不会等待。 - Stephen Cleary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接