Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#在Azure SQL中使用异步或线程进行长时间运行的数据库活动_C#_Sql Server_Async Await_Azure Sql Database - Fatal编程技术网

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

C#在Azure SQL中使用异步或线程进行长时间运行的数据库活动,c#,sql-server,async-await,azure-sql-database,C#,Sql Server,Async Await,Azure Sql Database,我有一个每晚的C#Windows服务,它可以更新表,并在5-10个Azure SQL数据库上调用一个长时间运行的存储过程。由于我可以在Azure SQL中同时运行所有数据库工作,而不会对性能造成影响,因此我希望异步运行它们。我可以使用async void调用一个方法(使用Await Task.Delay(10))或者创建一个新线程 更好的方法是什么?。。。这有关系吗 编辑:下面是异步void方法的一个示例。我想确定它在做什么 public static async void DoRanking

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

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

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

 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 ...
    }

您可以使用较旧的线程/线程池API或较新的TPL。但无论哪种情况,都不应该在线程池线程上启动长时间运行的进程

使用新线程或长时间运行的任务:

指定任务将是长时间运行的粗粒度操作 比细粒度系统涉及更少、更大的组件。信息技术 向TaskScheduler提供提示,提示可能存在超额订阅 保证的超额订阅允许您创建比 可用硬件线程数。它还向 任务计划程序,该任务可能需要额外的线程 任务,使其不会阻止其他线程的前进进程 或本地线程池队列上的工作项


您可以使用较旧的线程/线程池API或较新的TPL。但无论哪种情况,都不应该在线程池线程上启动长时间运行的进程

使用新线程或长时间运行的任务:

指定任务将是长时间运行的粗粒度操作 比细粒度系统涉及更少、更大的组件。信息技术 向TaskScheduler提供提示,提示可能存在超额订阅 保证的超额订阅允许您创建比 可用硬件线程数。它还向 任务计划程序,该任务可能需要额外的线程 任务,使其不会阻止其他线程的前进进程 或本地线程池队列上的工作项



等等,我想你误解了任务。延迟完成任务。它基本上是一个睡眠功能,因此它不会使您的任何任务异步。只有在数据库支持锁定的情况下,您才能执行您想要的操作。如果您有一个包含10项和一项任务的数据库,则删除8项,第二项删除4项,结果如何?你能在数据库中有-2项吗?亚瑟:虽然await可能不是为我所要求的而设计的,但它确实是这样工作的。我不在乎该方法何时完成,所以我调用它,它等待10毫秒,然后返回,而剩下的任务在接下来的一小时内自行完成。jdweng:没有锁定,数据库工作非常愉快。存储过程(一个任务)同时在每个数据库中运行,并且不会干扰自身。IMHO,从理论上讲,最好使用异步任务,因为您的进程主要是io绑定的。但实际上这并不重要,因为5到10个线程不会造成太大的伤害。在这种情况下,TPL不是很理想吗?这里演示了Parallel.For/Parallel.Foreach:等等,我想你误解了
任务。延迟
完成了什么。它基本上是一个睡眠功能,因此它不会使您的任何任务异步。只有在数据库支持锁定的情况下,您才能执行您想要的操作。如果您有一个包含10项和一项任务的数据库,则删除8项,第二项删除4项,结果如何?你能在数据库中有-2项吗?亚瑟:虽然await可能不是为我所要求的而设计的,但它确实是这样工作的。我不在乎该方法何时完成,所以我调用它,它等待10毫秒,然后返回,而剩下的任务在接下来的一小时内自行完成。jdweng:没有锁定,数据库工作非常愉快。存储过程(一个任务)同时在每个数据库中运行,并且不会干扰自身。IMHO,从理论上讲,最好使用异步任务,因为您的进程主要是io绑定的。但实际上这并不重要,因为5到10个线程不会造成太大的伤害。在这种情况下,TPL不是很理想吗?这里演示了Parallel.For/Parallel.Foreach:TPL非常有趣,以前从未看过。平行。Foreach可能很棒。与使用异步方法相比,TPL的优势是什么?TPL是使异步语言功能正常工作的框架。异步方法返回任务对象,
await
暂停代码的执行,直到任务完成。。。我调用了DoRanking方法(参见原始帖子中的edit),它等待10毫秒,然后返回到主线程。但是,该方法中的工作将持续到大约一小时后完成。它似乎完成了与第三方物流相同的事情,只是不同而已。我只是想知道我是不是在做坏事您应该让该方法返回一个任务,然后在调用代码中跟踪该任务。你所拥有的一切都是有效的,但它是“火与忘”的,没有任何工作的中心协调。是的。您可以在
Task中附加一个常见的“完成方法”或“继续”。ContinueWith
TPL非常有趣,以前没有看过。平行。Foreach可能很棒。与使用异步方法相比,TPL的优势是什么?TPL是使异步语言功能正常工作的框架。异步方法返回任务对象,
await
暂停代码的执行,直到任务完成。。。我调用了DoRanking方法(参见原始帖子中的edit),它等待10毫秒,然后返回到主线程。但是,该方法中的工作将持续到大约一小时后完成。它似乎完成了与第三方物流相同的事情,只是不同而已。我只是想知道我是不是在做坏事您应该让该方法返回一个任务,然后在调用代码中跟踪该任务。你怎么了