gpt4 book ai didi

c# - 如何使用 HostBuilder Generic Host ref StopAsync OperationCanceledException 设置 ShutdownTimeout

转载 作者:行者123 更新时间:2023-11-30 22:58:38 31 4
gpt4 key购买 nike

调查 source code ,StopAsync 的默认超时为 5 秒。 WebHostBuilder提供扩展方法UseShutdownTimeout,方便设置。但是 HostBuilder 不存在这样的等价物

我知道我想要超过 5 秒的超时可能是在滥用 HostBuilder 的意图,但它是一个管理相互依赖的作业集合的好框架。

我真的很感激一些关于如何使用 HostBuilder 的指导,就像 UseShutdownTimeout 对 WebHostBuilder 所做的一样,同时仍然使用官方 NuGet 包。我看了一下可能会扩展 HostingAbstractionsHostBuilderExtensions但它是一个静态类...

下面的示例控制台应用程序用于触发 StopAsync OperationCanceledException 事件。只需在 10 秒结束前按 Ctrl+C。

using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace StackOverflow_GenericHost_StopAsync
{
class Program
{
static async Task Main(string[] args)
{
var host = new HostBuilder()
.ConfigureServices((hostContext, services) =>
{
services.AddSingleton<IHostedService, MustRunToCompletionService>();
})

.Build();


await host.StartAsync();

try
{
await host.WaitForShutdownAsync();
}
catch (OperationCanceledException ex)
{
// We have completed a controlled shutdown but the Exception is ugly
Console.WriteLine(ex);
Console.ReadKey();
}

// just hangs if we don't
host.Dispose();

}
}

class MustRunToCompletionService : IHostedService
{
private Task _longRunningTask;

private async Task MustCompleteProcess()
{
// simulate long running job
Thread.Sleep(15000);
}

public Task StartAsync(CancellationToken cancellationToken)
{
_longRunningTask = Task.Run(MustCompleteProcess);
return Task.CompletedTask;
}

public Task StopAsync(CancellationToken cancellationToken)
{
// ignore cancellationToken, I really need this to run to completion
return Task.WhenAll(_longRunningTask);
}

}

}

最佳答案

感谢这篇关于 SuppressStatusMessages 的帖子,我得到了答案

.ConfigureServices((hostContext, services) =>
{
services.Configure<HostOptions>(o => o.ShutdownTimeout = TimeSpan.FromSeconds(90));

关于c# - 如何使用 HostBuilder Generic Host ref StopAsync OperationCanceledException 设置 ShutdownTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52910716/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com