You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#新手:多核持续计算+双向API通信应用的技术选型及入门

最佳方案:基于ASP.NET Core Web API实现

优先选择ASP.NET Core Web API作为基础框架——它自带成熟的HTTP服务栈、依赖注入体系,能快速搭建API和双向通信能力,同时官方提供的Hosted Service完美适配长期运行的后台计算任务,不用从零造轮子。相比控制台集成API的方案,Web API模板已经帮你完成了大部分基础配置,更适合新手快速上手。

具体实现步骤

1. 创建ASP.NET Core Web API项目

  • 用Visual Studio创建新项目,选择「ASP.NET Core Web API」模板,选.NET 8(长期支持版);或用CLI命令:
    dotnet new webapi -n ComputeService
    

2. 集成不间断多核计算的后台任务

用ASP.NET Core官方推荐的Hosted Service实现长期运行的计算任务,它能和Web API生命周期深度集成,支持优雅停止,还能方便地和其他服务交互。

  • 创建后台服务类:
    public class ComputeBackgroundService : BackgroundService
    {
        private readonly IHubContext<ComputeHub> _hubContext;
        private readonly ComputeStateService _stateService;
    
        // 依赖注入获取SignalR上下文和状态服务
        public ComputeBackgroundService(IHubContext<ComputeHub> hubContext, ComputeStateService stateService)
        {
            _hubContext = hubContext;
            _stateService = stateService;
        }
    
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                if (_stateService.IsRunning)
                {
                    // 启动与CPU核心数匹配的并行任务,最大化利用多核资源
                    var computeTasks = Enumerable.Range(0, Environment.ProcessorCount)
                        .Select(_ => Task.Run(DoHeavyComputation, stoppingToken));
    
                    await Task.WhenAll(computeTasks);
                }
                // 短暂延迟避免CPU空转(可按需调整或移除)
                await Task.Delay(100, stoppingToken);
            }
        }
    
        private async Task DoHeavyComputation()
        {
            // 这里编写你的计算逻辑,比如数值运算、数据处理等
            var result = /* 计算得到的结果 */;
            // 通过SignalR把计算结果推送给客户端
            await _hubContext.Clients.All.SendAsync("ComputeResultReceived", result);
        }
    }
    
  • 创建单例状态服务,用于控制计算启停:
    public class ComputeStateService
    {
        public bool IsRunning { get; set; } = true;
    }
    
  • 在Program.cs中注册服务:
    var builder = WebApplication.CreateBuilder(args);
    
    // 添加控制器和SignalR
    builder.Services.AddControllers();
    builder.Services.AddSignalR();
    
    // 注册单例状态服务和后台计算服务
    builder.Services.AddSingleton<ComputeStateService>();
    builder.Services.AddHostedService<ComputeBackgroundService>();
    
    var app = builder.Build();
    
    // 配置路由
    app.MapControllers();
    // 配置SignalR Hub路由
    app.MapHub<ComputeHub>("/computeHub");
    
    app.Run();
    

3. 实现双向通信(基于SignalR)

SignalR是ASP.NET Core官方的双向通信框架,能轻松实现服务器主动推送消息给客户端,同时支持客户端调用服务器方法。

  • 创建SignalR Hub类:
    public class ComputeHub : Hub
    {
        private readonly ComputeStateService _stateService;
    
        public ComputeHub(ComputeStateService stateService)
        {
            _stateService = stateService;
        }
    
        // 客户端调用此方法控制计算启停
        public async Task ToggleCompute()
        {
            _stateService.IsRunning = !_stateService.IsRunning;
            // 通知所有客户端状态变更
            await Clients.All.SendAsync("ComputeStateChanged", _stateService.IsRunning);
        }
    }
    
  • 客户端(如前端页面)可通过SignalR连接到/computeHub,接收计算结果和状态变更,同时调用ToggleCompute方法控制计算。

4. 可选:添加RESTful API接口

如果需要通过REST接口控制计算或查询状态,可添加控制器:

[ApiController]
[Route("api/compute")]
public class ComputeController : ControllerBase
{
    private readonly ComputeStateService _stateService;

    public ComputeController(ComputeStateService stateService)
    {
        _stateService = stateService;
    }

    [HttpGet("status")]
    public IActionResult GetStatus()
    {
        return Ok(new { IsRunning = _stateService.IsRunning });
    }

    [HttpPost("toggle")]
    public IActionResult Toggle()
    {
        _stateService.IsRunning = !_stateService.IsRunning;
        return Ok();
    }
}

为什么不选控制台集成API?

控制台应用集成API本质是手动搭建ASP.NET Core托管环境,和Web API项目核心逻辑一致,但需要自己配置Kestrel服务器、中间件等,反而增加不必要的工作量。对新手来说,Web API模板已封装好所有基础配置,能让你把精力集中在计算逻辑和通信功能上。

内容的提问来源于stack exchange,提问作者JGeorgeJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:15:39