簡體   English   中英

如何將 LINQ 結果作為任務返回

[英]How to return LINQ result as a task

我有一個方法:

public  Task<RequestPayinModel> InformationToSendPayInService(string qid)
{

 var payInObject = dbcontext.PayoutEntities.Where(s => s.QID == qid).Select(s => new RequestPayinModel
 {
      IBAN = s.IBAN,
      QID = s.QID,
      Rate = s.Rate,
      CollectionAmount = s.CollectionAmount,
      SettelmentAmount = s.SettelmentAmount,
      CollectionCurrency = s.CollectionCurrency,
      SettelmentCurrency = s.SettelmentCurrency
 });
  return  Task.FromResult(payInObject);
}

我收到一個錯誤,指出“System.Threading.Tasks.Task<System.Linq.IQueryable<Core.Models.RequestPayinModel>>”到“System.Threading.Tasks.Task<Core.Models.RequestPayinModel>”,有什么想法嗎?

實際上異步執行查詢的簡短答案是使用SingleOrDefaultAsyncFirstOrDefaultAsync

public async Task<RequestPayinModel> InformationToSendPayInService(string qid)
{
    var payInObject = await dbcontext.PayoutEntities
                              .Where(s => s.QID == qid)
                              .Select(s => new RequestPayinModel
        {
            IBAN = s.IBAN,
            QID = s.QID,
            Rate = s.Rate,
            CollectionAmount = s.CollectionAmount,
            SettelmentAmount = s.SettelmentAmount,
            CollectionCurrency = s.CollectionCurrency,
            SettelmentCurrency = s.SettelmentCurrency
        })
        .SingleOrDefaultAsync();


        return  payInObject;
}

返回已完成的任務以使同步方法看起來像異步方法是一個非常糟糕的主意。 調用者希望該方法能夠在無阻塞的情況下運行,如果它實際上阻塞,則可能會導致性能嚴重下降或死鎖。

返回Task不會使方法異步執行。 添加async也不行。 方法本身需要執行一個異步操作。

IQueryable<T>是一個查詢,而不是它的結果。 我們需要使用ToListSingle等或它們的異步等價物SingleAsyncFirstAsync等來執行該查詢。

使用await允許在不阻塞線程的情況下等待已經激活的異步操作。 一旦該操作完成,在await表達式之后繼續執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM