亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么在添加任務時會創建列表的新實例?

為什么在添加任務時會創建列表的新實例?

C#
蕪湖不蕪 2022-12-24 14:11:58
我有一個 asp.net 應用程序,用戶可以在其中按下按鈕來啟動長時間運行的操作,并且可以多次這樣做。每次他們這樣做時,我都想將創建的任務添加到列表中,以便稍后,當他們想要進入下一頁時,該頁面會等待列表中的所有任務完成后再重定向。我有以下結構:private List<Task> tasks = new List<Task>();private SemaphoreSlim mutex = new SemaphoreSlim(1, 1);// Simulate some workprivate async Task MyWork(){    int t = 0;    while (t < 5)    {        await Task.Delay(TimeSpan.FromSeconds(5));        t ++;    }}// Called in the button's eventhandlerpublic void DoWork(){    mutex.Wait();    this.tasks.Add(Task.Run(() => MyWork());    mutex.Release();}調試時我發現每次 DoWork 訪問任務列表時,當任務被添加到列表時列表是空的,似乎每次都創建一個單獨的列表實例。另外,當我稍后以另一種方法訪問該列表時,該列表在那里是空的。為什么會發生這種情況,而不是將每個任務都添加到同一個列表實例中?
查看完整描述

1 回答

?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

當 ASP.NET 收到新請求時,它會創建頁面的新實例。這就是您總是看到空列表的原因。

應該做的是讓您的按鈕處理程序創建一個請求 ID(例如,Guid),將該請求插入可靠隊列,然后使用該請求 ID 更新會話狀態。因此,您擁有的不是任務列表,而是請求 ID(字符串)列表。然后讓一個單獨的工作進程從該隊列中讀取并執行實際工作。最后,“等待”頁面應該進行輪詢,直到請求全部完成。


查看完整回答
反對 回復 2022-12-24
  • 1 回答
  • 0 關注
  • 98 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號