使用 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
方法。这包括任何类型的 I/O,例如从 Internet 和 EF 下载数据。
如果要在执行 CPU 密集型操作时释放当前线程,则应使用多线程。您可以使用Task.Run
(请不要StartNew
)将工作推送到后台线程。
在您的情况下,仅使用 async
/await
更正确。