小编Gra*_*fus的帖子

TypeScript 联合函数类型

我正在尝试为箭头函数创建联合类型。目标是能够根据第一个参数推断第二个参数的类型。

理想情况下,我想y成为类型number | string,并且z成为'first' | 'second'。但是在缩小了yorz的类型后,会自动推断出另一个参数的缩小类型。

不幸的是,TypeScript 似乎无法处理这样的复杂案例,但我想知道你们中是否有人遇到过类似的问题。

在简化的场景中,我的代码如下所示:

type Callback<T1, T2> = (y: T1, z: T2) => void;

const test = (x: Callback<number, 'first'> | Callback<string, 'second'>) => {
    return;
}

// Parameter 'y' implicitly has an 'any' type.
// Parameter 'z' implicitly has an 'any' type.
test((y, z) => {
    if(typeof y === 'number') {
        // y is a number
        // so z must be 'first' …
Run Code Online (Sandbox Code Playgroud)

typescript

7
推荐指数
1
解决办法
2347
查看次数

IHostedService 的正常关闭

我正在尝试在 .NET Core 中开发一个简单的 API,它允许异步处理请求。

  1. 请求发送给控制器
  2. 在后台服务 (IHostedService) 上安排的工作
  3. 控制器返回 202
  4. 后台服务执行长时间运行的操作

由于应用程序将在 IIS 上运行,因此在控制器返回响应后可能会发生池回收。我想实现一种允许应用程序正常关闭的方法 - 完成它当前正在执行的任务,但不接受任何新任务。

我在正常关闭运行到结束时遇到了困难。出于测试目的,我简化了该StopAsync()方法,因此现在它只包含异步 20 秒等待:

public async Task StopAsync(CancellationToken cancellationToken)
    {
        _logger.LogInformation("Hosted service is stopping...");

        try
        {
            // Signal cancellation to the executing method
            _stoppingTokenSource.Cancel();

            _logger.LogInformation("Delay by 20s");
            await Task.Delay(20000, cancellationToken);
            _logger.LogInformation("Delay over");
        }
        finally
        {
            // Await all pending download requests
            await Task.WhenAny(Task.WhenAll(_pendingTasks), Task.Delay(Timeout.Infinite, cancellationToken));

            _logger.LogInformation("Hosted service has been stopped successfully.");
        }
    }
Run Code Online (Sandbox Code Playgroud)

日志只显示显示:

  • 托管服务正在停止...
  • 延迟 20 秒

查看EventViewer,我可以看到为关闭引发的 2 …

c# iis iis-7.5 asp.net-core

5
推荐指数
1
解决办法
5217
查看次数

标签 统计

asp.net-core ×1

c# ×1

iis ×1

iis-7.5 ×1

typescript ×1