- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道这是一个设计问题,但我试图理解这一点以最好的方式使用它。因此,请将此问题视为对如何使用其最大功能的澄清。
为什么它没有设计基于 KISS 的同步和异步方法( StartAsync
, StopAsync
),AFAIK,Async 在 web 请求中的主要好处是让一些空闲线程被释放用于服务进一步的请求,但它IHostedService
不可能是这种情况因为没有请求的概念,并且总是有一个正在运行(或挂起)的线程。
最佳答案
我们去兔子洞吧。IHostedService
的实例由 HostedServiceExecutor.StartAsync()
调用这是异步的( HostedServiceExecutor source code )。HostedServiceExecutor.StartAsync()
由 WebHost.StartAsync()
调用这是异步的( WebHost source code )。WebHost
工具IWebHost
它有同步和异步版本可供启动:Start
和 StartAsync
.然而WebHost.Start()
实现只是调用异步版本:
public void Start()
{
StartAsync().GetAwaiter().GetResult();
}
WebHost.Start()
由
Program.Main
调用(由默认 ASP.NET Core 项目模板生成):
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
IHostedService
是异步的?”并得到“为什么
IWebHost
是异步的?”或“为什么 c# 7 引入了异步
Main()
方法?”。
public static void Main(string[] args)
{
SomeAsyncCall().GetAwaiter().GetResult();
}
static async Task Main(string[] args)
{
await SomeAsyncCall();
}
IHostedService.StartAsync()
.它可能需要在主机服务准备期间调用一些异步操作。
This discussion主机服务概念对此有明确的声明:
The StartAsync method is asynchronous because we may need to execute some preparation tasks for the job that may fail to execute and compromise the initialization.
IHostedService
的文档,这是一个很好的:
Implementing IHostedService in ASP.NET Core 2.0
关于.net - 为什么 IHostedService 是异步的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49310446/
下面是我运行 IHostedService 的简单代码 internal class Program { public static Task Main(string[] args) {
我正在尝试向 IHostedService 添加配置值,但不知道如何操作。 这是我目前拥有的: 启动 services.Configure(Configuration.GetSection("MyOp
我正在尝试向 IHostedService 添加配置值,但不知道如何操作。 这是我目前拥有的: 启动 services.Configure(Configuration.GetSection("MyOp
我正在尝试在 .NET Core 中开发一个允许异步处理请求的简单 API。 请求发送给 Controller 安排在后台服务 (IHostedService) 上的工作 Controller 返回
我正在尝试使用 IHostedService 创建后台服务。如果我只有一个后台服务,一切都很好。当我尝试创建多个 IHostedService 的实现时只有最先注册的才真正运行。 services.A
谁能向我解释为什么我的服务器无缘无故停止?在我的 IHostedService 实现下面: public class HostServiceBox : IHostedService {
我知道这是一个设计问题,但我试图理解这一点以最好的方式使用它。因此,请将此问题视为对如何使用其最大功能的澄清。 为什么它没有设计基于 KISS 的同步和异步方法( StartAsync , StopA
我不知道如何访问我的 ConsoleHostedService 实现类中的命令行参数。我在源代码中看到 CreateDefaultBuilder(args) 以某种方式将其添加到配置中...命名为 A
我不知道如何访问我的 ConsoleHostedService 实现类中的命令行参数。我在源代码中看到 CreateDefaultBuilder(args) 以某种方式将其添加到配置中...命名为 A
有没有办法配置.net core/autofac等待HostedService完成启动? 简单的例子 #define useAutofac public class Startup { #if use
ASP.NET Core 2.0 documentation定义 IHostedService 接口(interface)如下: StartAsync(CancellationToken) - Cal
这个问题是关于在 IIS 上运行的 ASP.NET Core 2.2 应用程序,特别是在注册 IHostedService 的实例时。与 DI 容器。 我阅读的每篇文章 IHostedService.
我知道一个 IHostedService只运行一次听起来像一个控制台应用程序,但我想使用它而不是一个普通的控制台应用程序的原因是: .net core 介绍 Generic Host用于运行非 htt
我有一个 .NET Core 3.1 应用程序,它提供一个描述应用程序运行状况的端点,以及一个处理数据库中数据的 IHostedService。 但是有一个问题,HostedService 的工作函数
我在 DI 容器中注册了多个 IHostedService (BackgroundService) 实例。 services.AddHostedService(); services.AddHoste
我在 DI 容器中注册了多个 IHostedService (BackgroundService) 实例。 services.AddHostedService(); services.AddHoste
我在 .netcore 2.2 中构建了通用主机 (IHostedService)。我将 HostBuilder 作为 RunConsoleAsync() 运行。RunConsoleAync() 将等
我正在构建一个 IHostedService 实现。我的服务做了一些事情,这些事情应该在服务终止时处理,比如在 StartAsync() 中向外部服务注册一些事件处理程序。 现在我想知道,我应该在哪里
.net核心BackgroundService或 IHostedService的 start 方法是异步的: //IHostedService Task StartAsync(Cancellation
无论我们是否应该,我们可以在 Azure Functions 应用程序中使用 IHostedService 吗? 以下尝试将托管服务(特别是后台服务)注册为 IHostedService: inter
我是一名优秀的程序员,十分优秀!