Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.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上运行一次while(true)_C#_Azure - Fatal编程技术网

C# 在Azure上运行一次while(true)

C# 在Azure上运行一次while(true),c#,azure,C#,Azure,我是Azure新手,我需要在Azure中完成DoSomeWork()。此DoSomeWork()应定期运行,大约每N分钟运行一次。但是,DoSomeWork()不能同时执行两次。换句话说,任何DoSomeWork()执行都不能在前一个DoSomeWork()执行完成之前开始 我已经了解了Azure Web作业,特别是连续的Azure Web作业。这似乎是一条路要走,但不清楚如何开始,尤其是在VS: static void Main() { var config = new JobHost

我是Azure新手,我需要在Azure中完成DoSomeWork()。此DoSomeWork()应定期运行,大约每N分钟运行一次。但是,DoSomeWork()不能同时执行两次。换句话说,任何DoSomeWork()执行都不能在前一个DoSomeWork()执行完成之前开始

我已经了解了Azure Web作业,特别是连续的Azure Web作业。这似乎是一条路要走,但不清楚如何开始,尤其是在VS:

static void Main()
{
    var config = new JobHostConfiguration();

    if (config.IsDevelopment)
    {
        config.UseDevelopmentSettings();
    }

    var host = new JobHost(config);
    // The following code ensures that the WebJob will be running continuously
    host.RunAndBlock();
}
还有一个函数类将输入作为QueueTrigger修饰的参数,但我不希望代码被任何队列消息触发


如何让一个简单的控制台。WriteLine(“hello world”)每分钟都在运行,但没有重叠?如果Azure Web作业不是一条可行之路,那么我应该使用什么(应该基于Azure)?

如评论中所述,Azure Web作业支持
TimerTrigger功能
(计划的Web作业),该功能可以根据您的需要每xxx分钟运行一次

使用azure webjob时非常简单。例如,在visual studio中,只需创建一个console项目->添加这行代码:
console.WriteLine(“hello world”)
->然后构建项目->然后将所有必要的文件(包括
.exe
压缩到
.zip
文件->中,最后将
.zip
文件上载到您的webjob中,并设置时间表(比如每5分钟执行一次代码)

有关创建计划的Web作业的更多详细信息,请参阅


您还可以考虑使用支持TimeReTe默功能的其他Azure服务,例如

< P> WebJobs可以很复杂地设置和维护。特别是在处理CI /CD流水线时,我现在有几段运行,准备将它们移到下面一个更可靠和可维护的解决方案:

我们设置计划工作的方式是使用。它非常可靠和耐用,因为它由Azure管理。您只需设置它,抛出代码,其余的由Azure来确保它在配置时启动

如果您想在自己的应用程序中执行此操作,请查看在ASP.NET核心应用程序中运行。在后台服务中将启动并执行一些工作。请记住,如果您的应用程序水平扩展,您将运行两个计时器,这在您的情况下可能不太好

你可以做一些花哨的事情,比如设置Azure函数在计划的时间命中WebAPI上的端点。然后你可以将工作发送到一个
BackgroundService
,它是singleton,因此如果你当前正在运行作业,你可以阻止第二个请求

我们倾向于走最后一条路。Azure启动计时器,函数执行,向端点发送消息,端点将工作放在后台


除了我提到的选项之外,还有很多选项,但这些是我唯一有幸设计的选项。

对不起,这是一个“什么是最佳选项”的问题,这取决于您在
DoSomeWork()
中做什么以及您喜欢如何管理它。Webjobs当然可以做到这一点,但功能也可以做到这一点(参见TimerTrigger,我认为它也可以在WebJobs上找到)还有逻辑应用程序、Azure Runbook、在VM中运行东西、运行web应用程序和启动线程等等。您好,如果答案有帮助,您能接受它作为答案吗?谢谢。它可能会帮助其他有同样问题的人。@IvanYang感谢您的回答。我接受了另一个答案,因为它解决了我对t的其他特定需求他没有在同一时间运行两次代码,我不能标记两个被接受的答案。两个答案都很好,我希望这将有助于其他人在未来