使用 async 关键字以及在新线程上启动方法的效率是更高还是更低

本文关键字:方法 启动 效率 关键字 async 新线程 线程 使用 | 更新日期: 2023-09-27 18:32:47

我有一个程序,它从互联网下载大量数据,并使用实体框架将其保存到我的本地数据库中。我在下面有此示例代码。对我来说,在新线程上启动该方法并在保存模型数据时使用 async 关键字是否更有效,还是效率较低。

static void Main(string[] args)
    {
        using (DBModel model = new DBModel())
        {
            model.Database.Connection.Open();
            Task task = Task.Factory.StartNew(() => downloadData(model));
            task.Wait();
        }
    }
public static async Task<string> downloadData(DBModel model)
    {
        // do something first
        await model.SaveChangesAsync();
    }

使用 async 关键字以及在新线程上启动方法的效率是更高还是更低

是不是效率更高...

这是个错误的问题。最好先考虑哪个更正确,然后在生产代码中遇到经过验证的性能问题后搜索更有效的方法。

在执行自然异步的操作时,应使用async方法。这包括任何类型的 I/O,例如从 Internet 和 EF 下载数据。

如果要在执行 CPU 密集型操作时释放当前线程,则应使用多线程。您可以使用Task.Run(请不要StartNew)将工作推送到后台线程。

在您的情况下,仅使用 async/await 更正确。