首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#在Azure SQL中使用异步或线程进行长时间运行的数据库活动

C#在Azure SQL中使用异步或线程进行长时间运行的数据库活动
EN

Stack Overflow用户
提问于 2020-12-31 21:16:19
回答 1查看 134关注 0票数 0

我有一个夜间的Azure C# Windows服务,它更新表格并在5-10个Azure SQL数据库上调用长时间运行(~小时)的存储过程。由于我可以在Azure SQL中同时运行所有数据库工作,性能几乎没有影响,因此我希望异步运行它们。我可以使用async void (使用Await Task.Delay(10))调用一个方法,也可以创建一个新线程。

什么是更好的方法?有关系吗?

编辑:这是一个异步void方法的例子。我想确定它在做什么。

代码语言:javascript
复制
 public static async void DoRanking(object e)
    {
        // will start all orgs concurrently
        await Task.Delay(10);
        ... do a bunch of database work here ...
        ... call a long running stored procedure here ...
    }
EN

回答 1

Stack Overflow用户

发布于 2021-01-01 01:05:00

您可以使用较旧的Thread/ThreadPool API或较新的TPL。但在这两种情况下,您都不应该在线程池线程上启动一个长时间运行的进程。

使用新线程或LongRunning任务:

指定任务将是一个长时间运行的粗粒度操作,与细粒度系统相比,该操作涉及更少、更大的组件。它向TaskScheduler提供了一个提示,即可能需要超额订阅。超额订阅允许您创建比可用硬件线程数更多的线程。它还向任务计划程序提供提示,提示该任务可能需要一个额外的线程,以便它不会阻塞本地线程池队列中其他线程或工作项的转发进度。

Documentation for TaskCreationOptions.LongRunning

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65521392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档