C# Task.Delay创建System.ObjectDisposedException:&x27;无法访问已释放的对象';带信号器组

C# Task.Delay创建System.ObjectDisposedException:&x27;无法访问已释放的对象';带信号器组,c#,asp.net,signalr,C#,Asp.net,Signalr,我正在使用asp.net core和Signal编写代码,其中有一个方法: public async void newGameTimer(int tableID ) { bool stop = true; int val = 0; while (stop) { await Task.Delay(1000); val++;

我正在使用asp.net core和Signal编写代码,其中有一个方法:

public async void newGameTimer(int tableID )
        {
            bool stop = true;
            int val = 0;
            while (stop)
            {
                await Task.Delay(1000);
                val++;
                if (val > 5)
                {
                    stop = false;
                    newGame(tableID);
                }
            }
        }
然后在newGame(tableID)方法中,如下所示:

public async void newGame(int tableID)
{
    await Clients.Group(group).SendAsync("updateTotalPot", 200);
}
我正在通过信号器组向玩家组发送asyn响应。但这是一个错误

“System.ObjectDisposedException:”无法访问已处置的对象。 ObjectDisposed\u ObjectName\u Name'

我做了搜索,得到的回答像“Task.Dealy()”可以创建ObjectDisposed错误。 现在不明白了,怎么解决这个问题

我只想等待一段时间,然后向一组玩家发送响应。。有人能帮我吗

项目:在线实时扑克游戏 扑克在线游戏,一群朋友可以创建一张桌子,一起玩扑克。 前端:反应 后端:asn.net核心、信号器、Redis

逻辑: 第一个玩家通过调用以下方法创建表:

public async Task LoginWindow(string name, string password, int newTable, int joinTable)
{ 
   //- this method saves many keys in Redis in-memory like this
    dbr.StringSet("table" + "ToBet", 0);

  //- at end send reply with following command
     await Clients.Caller.SendAsync("updateMessage",  "Welcome to table no " + tableID);

//- then this method check, if second player has called this method, then calls the timer to start game after 5 seconds

  newGameTimer(tableID);
 
}


nothing else...

这里不需要
async void
。解决方案可能是这样的

public异步任务NewGameWithDelay(int tableID)
{
对于(int i=0;i<5;i++)
{
如果(等待CheckForSecondPlayer())
{
//发现
wait Clients.Group(Group.SendAsync)(“updateTotalPot”,200);
返回;
}
等待任务。延迟(1000);
}
//找不到
}
私有异步任务CheckForSecondPlayer()
{
//如果找到,则返回true,否则返回
返回false;
}
public async Task LoginWindow(字符串名称、字符串密码、int newTable、int joinTable)
{ 
dbr.StringSet(“表”+“托贝”,0);
wait Clients.Caller.SendAsync(“updateMessage”,“欢迎使用表号”+tableID);
延迟等待新游戏(tableID);
}

在-ve投票之前,请让我知道,为什么我值得-ve投票,因为我花了很多小时试图解决这个问题,但都没能解决。您有异常的堆栈跟踪吗?下一个问题:为什么
异步无效
不是
异步任务
?如果这是出于设计,并且不是一种不好的做法,那么异常处理在哪里呢?实际上,“异步任务”正在创建相同的错误,就像它自动“释放”对象一样。所以我设置了void,它解决了这个问题,但是现在“Task.delay()”给出了相同的错误。实际上,“wait Task.delay()”产生了问题,因为如果我删除该行,那么它工作正常并正确发送响应。简言之,问题不在显示的代码范围内。请显示您在哪里调用
newGameTimer()
的方法,然后我将用固定的代码回答问题。你可以编辑这个问题。我尝试过这个解决方案,但它对我没有帮助,并且给了我同样的错误“ObjectDisposed”,实际上我不能直接延迟5秒,因为如果有新玩家,我必须每秒钟检查一次。。请告诉我一件事,有没有其他方法,让异步waite,这样我就可以避免Task.delay()。明天我将以新鲜的头脑重新开始新的尝试,因为现在是凌晨2点。。亲爱的,我会告诉你最新情况的。。顺便说一句,谢谢你宝贵的时间。