繁体   English   中英

调用将在原始线程完成时在后台运行的方法

[英]Call a method that will run in the background while the original thread finishes

当我的 API 中的端点被命中时,我有一个服务被调用。 在Service中,我将object添加到一个列表中,然后调用一个应该休眠一定时间的新方法,然后更新刚刚添加到原始列表中的object。 问题是我需要启动线程的 POST 来完成并返回状态代码,而时间延迟仍在继续。 目前,我的 POST 仍在等待延迟方法完成。

如果可以这样做,有什么想法吗?

创建服务

List<Object> objList = new List<Object>();

public async Task<dynamic> Create(Object obj)
{
    var newObj = new Object()
    {
        Id = obj.Id,
        Name = obj.name,
        Status = obj.Status
    };

    objList.Add(newObj);

    ChangeState(newObj.Id);

    return newObj;
}

改变状态方法

public async void ChangeState(string objId)
    {
        Thread.Sleep(5000);

        var objState = objList.FirstOrDefault(n => n.Id == objId);

        objState.State = "APPROVED";
    }

希望您的服务寿命足够长,以使其有意义:

List<Object> objList = new List<Object>();

public dynamic Create(Thing obj)
{
    var newObj = new //i assume you meant to create an anonymous type here
    {
        Id = obj.Id,
        Name = obj.name, //public things should be PascalCase
        Status = obj.Status
    };

    objList.Add(newObj);

    _ = ChangeStateAsync(newObj.Id); //set it going and discard the result; it'll complete 4.9999999999 seconds after this method finishes

    return newObj;
}

public async Task ChangeStateAsync(string objId)
{
    await Task.Delay(5000);

    var objState = objList.FirstOrDefault(n => n.Id == objId);

    objState.State = "APPROVED";
}

ps;

    class Thing
    {
        public string Id;
        public string name; //public things should be PascalCase
        public string Status;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM