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

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

鎖定在 Web 方法上的 Task.Run() 內不起作用 c#?

鎖定在 Web 方法上的 Task.Run() 內不起作用 c#?

C#
慕工程0101907 2021-09-19 15:37:53
我使用 nhibernate 作為我的網絡服務的 orm,我已經實現了一個 CustomSqlDriver。我創建 CustomSqlDriver 的原因是因為我需要獲取并保存在應用程序中執行的每個查詢(及其參數值)到數據庫。每次發生查詢(選擇、更新等)時都會調用 AdjustCommand 方法并按相應的順序調用。public class CustomSqlDriver : SqlClientDriver {    private static readonly log4net.ILog log = log4net.LogManager.GetLogger("CustomSqlClientDriverLogger");    private static readonly Object _lock = new Object();    public override void AdjustCommand(IDbCommand command)    {        base.AdjustCommand(command);        var parameters = (SqlParameterCollection)command.Parameters;        QueryType queryType = GetQueryType(command);        string tableName = GetTableName(command.CommandText);        string fullCommandText = GetFullQuery(command, parameters);        Task.Run(() =>        {            lock (_lock)            {                log.Info($"Trying to save the query = {fullCommandText}");                SaveToDb((int)queryType, fullCommandText, tableName);            }        });    }}我需要按順序保存每個查詢,因為稍后我將在不同的 FIFO 進程中使用它們。不能在同一個線程中完成(因為它可能很慢)。如您所見,我嘗試在 Task.Run() 中的靜態對象上使用鎖,只要對任何 webmethod 的調用是同步的,就可以工作,但如果我并行調用它們,則某些行在保存時會丟失順序到數據庫。我不確定這是最好的方法 D:任何幫助將不勝感激。
查看完整描述

1 回答

  • 1 回答
  • 0 關注
  • 313 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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