【问题标题】:Threading MVC 6 .net 5线程化 MVC 6 .net 5
【发布时间】:2015-09-24 17:05:00
【问题描述】:

大家好,我开发了一个 API,用于处理重定向到多个数据库的请求。

它一直运行良好,但最近遇到了障碍。我已经在谷歌上搜索了两天并尝试了几种不同的解决方案,但它们似乎都不起作用。

我的应用程序基于 FIFO 处理请求。

    [HttpGet("getList")]
    public string Get(string token, string page, string amount) {
        string value = null;
        var thread = new Thread(
          () => {
              value = CustomerDA.getList(token, page, amount);
        });
        thread.Start();
        thread.Join();
        return value;
    }

这是我尝试过的最新解决方案...我需要根据传递给此方法调用的内容将字符串返回给客户端。我很困惑,因为我认为这项技术默认异步处理这些请求。

这是另一个尝试:

    [HttpGet("getList")]
    public async Task<string> Get(string token, string page, string amount) {
        var t = Task<int>.Run(() => {
            return CustomerDA.getList(token, page, amount);
        });
        return t.Result;
    }

谢谢!

【问题讨论】:

  • 你为什么要启动一个线程然后立即等待它完成?
  • 最终我想启动线程,然后继续处理其他请求...如何在不等待客户端完成的情况下将值返回给客户端?
  • 你想要异步,而不是线程。只有当你有一个异步 API 可以调用时,这才有可能。阅读blog.slaks.net/2014-12-23/parallelism-async-threading-explained
  • 我尝试过使用异步任务,但仍然没有成功。我一直在寻找示例代码,但此时一切看起来都已经过时了。
  • 公共异步任务 Index() { return View(await db.Employees.ToListAsync());我尝试了与此类似的方法,但无法实现我想要的。

标签: c# .net api azure asp.net-core-mvc


【解决方案1】:

在第二次尝试中,您创建一个Task(= 线程),然后立即同步等待它完成。如果你想异步等待,你必须使用await

[HttpGet("getList")]
public async Task<string> Get(string token, string page, string amount) {
    var t = Task<int>.Run(() => {
        return CustomerDA.getList(token, page, amount);
    });
    return await t;
}

【讨论】:

  • 是的,它与您找到的解决方案完全相同。只是等待在另一个地方。
  • 请接受你的答案或我的答案(你更喜欢哪个),所以人们不会认为你没有解决方案;)
  • 抱歉,太激动了。再次感谢
【解决方案2】:

感谢 SLaks 和他为我指明了正确的方向,我得以解决该问题:

    [HttpGet("getList")]
    public async Task<string> Get(string token, string page, string amount) {
        var t = await Task.Run(() => {
            return CustomerDA.getList(token, page, amount);
        });
        return t;
    }

【讨论】:

  • 不要这样做;它只会让你的问题变得更糟。除非你真的有一个非阻塞的方法可以调用,否则异步对你没​​有帮助。
  • 它只是调用一个将返回数据的 SQL 查询。你有什么建议?
猜你喜欢
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 2021-12-27
相关资源
最近更新 更多