小编mar*_*atg的帖子

使用 ASP.NET Core 中的托管服务并行排队后台任务

我正在使用 ASP.NET Core 2.1 版中的托管服务功能对新的后台任务进行一些测试,更具体地说是使用排队后台任务,我想到了一个关于并行性的问题。

我目前严格遵循 Microsoft 提供的教程,并且在尝试模拟来自同一用户的多个请求以将任务排入队列时的工作负载时,我注意到所有工作项都是按顺序执行的,因此没有并行性。

我的问题是,这种行为是预期的吗?如果是这样,为了使请求执行并行,是否可以触发并忘记,而不是等待 workItem 完成?

我在没有运气的情况下搜索了几天有关此特定场景的信息,因此如果有人提供任何指南或示例,我会非常高兴。

编辑:教程中的代码很长,所以它的链接是https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-2.1#queued -背景任务

执行工作项的方法是这样的:

public class QueuedHostedService : IHostedService
{
    ...

    public Task StartAsync(CancellationToken cancellationToken)
    {
        _logger.LogInformation("Queued Hosted Service is starting.");

        _backgroundTask = Task.Run(BackgroundProceessing);

        return Task.CompletedTask;
    }

    private async Task BackgroundProceessing()
    {
        while (!_shutdown.IsCancellationRequested)
        {
            var workItem = 
                await TaskQueue.DequeueAsync(_shutdown.Token);

            try
            {
                await workItem(_shutdown.Token);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, 
                    $"Error occurred executing {nameof(workItem)}.");
            }
        }
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

问题的重点是要知道是否有人可以分享有关如何使用此特定技术同时执行多个工作项的知识,因为服务器可以处理此工作负载。

我在执行工作项时尝试了即发即弃的方法,它按照我的预期工作,同时并行执行多个任务,我不确定这是否是一个好的做法,或者是否有处理这种情况的更好或正确的方法。

c# parallel-processing asp.net-core-2.1 asp.net-core-hosted-services

13
推荐指数
1
解决办法
7140
查看次数

如何销毁/卸载 vue.js 3 组件?

我有一个相当大的vue.js 2应用程序,它具有动态选项卡机制。用户可以与应用程序打开和关闭选项卡进行交互,每个选项卡代表一条路线。为了实现这一点,我使用 vue router 并保持活动状态,如下例所示。

<template>
  <div id="app">
    <keep-alive>
      <router-view :key="routerViewKey"/>
    </keep-alive>
  </div>
</template>
Run Code Online (Sandbox Code Playgroud)

当用户单击关闭选项卡按钮时,$destroy将调用该函数以从缓存中删除其组件。我正在将此应用程序从 vue 2 迁移到 vue 3,但是,阅读 vue.js 3 的重大更改文档我们可以看到:

删除的 API

$destroy实例方法。用户不应再手动管理各个 Vue 组件的生命周期。

到目前为止我还没有找到任何替代方案,那么如何以编程方式销毁/卸载vue.js 3中 keep-alive 内的缓存组件?

编辑 1(4 月 22 日):到目前为止,仍然无法$destroy在 vue.js 3 中实现 vue.js 2 上的功能。目前有一个 RFC 可以解决此问题(https://github.com/vuejs/rfcs/ Discuss/283),但不幸的是它已经开放一年多了,没有任何反馈。

vue.js vue-router vuejs3

7
推荐指数
2
解决办法
4万
查看次数