第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何將元組轉(zhuǎn)換為異步任務(wù)

如何將元組轉(zhuǎn)換為異步任務(wù)

C#
阿晨1998 2022-11-13 15:49:15
我正在做一個(gè)小應(yīng)用程序,我需要幫助,因?yàn)槲也恢绬栴}出在哪里。好久沒接觸C#了,在一點(diǎn)一點(diǎn)的學(xué)習(xí),因?yàn)檫@一切都是我的閑暇,不再。我有以下工作正常的元組:private Tuple<int, int, int, int> CheckStatus()        {            int out = 0;            int stage = 0;            int retired = 0;            int stop = 0;            for (int i = 0; i < Dgv.Rows.Count; i++)            {                if (Dgv.Rows[i].Cells["Start"].Value != null)                {                    out = out + 1;                }                if (Dgv.Rows[i].Cells["Start"].Value != null && Dgv.Rows[i].Cells["Finnish"].Value == null)                {                    stage = stage + 1;                }                if (Dgv.Rows[i].Cells["Start"].Value != null && Dgv.Rows[i].Cells["Finnish"].Value != null)                {                    stop = stop + 1;                }            }            retired = GetRetirements();            stage = stage - retired;            return new Tuple<int, int, int,int>(out, stage, retired, stop);        }我想將它傳遞給異步執(zhí)行 await 方法,因?yàn)楝F(xiàn)在 GetRetirements 方法是異步任務(wù),并將代碼更改為此,但我遇到了問題:private async Task<Tuple<int, int, int, int>> CheckStatus()        {            int out = 0;            int stage = 0;            int retired = 0;            int stop = 0;            for (int i = 0; i < Dgv.Rows.Count; i++)            {                if (Dgv.Rows[i].Cells["Start"].Value != null)                {                    out = out + 1;                }                if (Dgv.Rows[i].Cells["Start"].Value != null && Dgv.Rows[i].Cells["Finnish"].Value == null)                {                    stage = stage + 1;                }                if (Dgv.Rows[i].Cells["Start"].Value != null && Dgv.Rows[i].Cells["Finnish"].Value != null)                {                    stop = stop + 1;                }            }            retired = await GetRetirements();            stage = stage - retired;            return new Tuple<int, int, int,int>(out, stage, retired, stop);        }我做錯(cuò)了什么?這是我第一次使用 Tuple,我不知道它可能是錯(cuò)誤的。非常感謝你。
查看完整描述

4 回答

?
縹緲止盈

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊

CheckStatus現(xiàn)在是一個(gè)異步函數(shù)。要獲得您需要的結(jié)果await,您可能只想調(diào)用該函數(shù)一次。請(qǐng)注意如何async添加到事件處理程序GetCheckStatus并將一直流向async void事件處理程序,例如單擊按鈕。


private async Task GetCheckStatus()

{

    var status = await CheckStatus()

    LblOut.Text = status.Item1.ToString();

    LblStage.Text = status.Item2.ToString();

    LblRetired.Text = status.Item3.ToString();

    LblStop.Text = status.Item4.ToString();

}


查看完整回答
反對(duì) 回復(fù) 2022-11-13
?
Helenr

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊

您已將內(nèi)部調(diào)用設(shè)為異步,但外部調(diào)用并未等待它。嘗試類似的東西:


private async Task GetCheckStatus()

{

    var result = await CheckStatus();


    LblOut.Text = result .Item1.ToString();

    LblStage.Text = result .Item2.ToString();

    LblRetired.Text = result .Item3.ToString();

    LblStop.Text = result .Item4.ToString();

}


查看完整回答
反對(duì) 回復(fù) 2022-11-13
?
絕地?zé)o雙

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊

您更改CheckStatus()為返回 a Task<>。您可能應(yīng)該await這樣做并像以前一樣使用結(jié)果。

您還可以根據(jù)您的 UI 框架以不同的方式處理它。但歸結(jié)為“這種方法現(xiàn)在是aysnc,就這樣處理吧?!?/p>


查看完整回答
反對(duì) 回復(fù) 2022-11-13
?
莫回?zé)o

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊

原因是,您忘記在訪問結(jié)果之前等待CheckStatus()結(jié)果。


以 async 結(jié)尾的異步函數(shù)名稱是非常傳統(tǒng)的。這是為了警告用戶不要忘記他們正在使用 async-await,并且他們應(yīng)該在訪問結(jié)果之前等待返回值。


這還有一個(gè)好處是您可以同時(shí)提供普通版本和異步版本


async Task<int> GetRetirementsAsync(){...}


async Task<Tuple<int, int, int, int>> CheckStatusAsync()

{

     ...

     int retired = await GetRetirementsAsync();

     return new Tuple...

}


async Task GetCheckStatusAsync()

{

    var tuple = await CheckStatusAsync();


    // process output:

    LblOut.Text = tuple.Item1.ToString();

    LblStage.Text = tuple.Item2.ToString();

    LblRetired.Text = tuple.Item3.ToString();

    LblStop.Text = tuple.Item4.ToString();

}

可能的性能改進(jìn)

您想要使用 GetRetirementsAsync 而不是非異步 GetRetirements 的原因是因?yàn)槟MM(jìn)程內(nèi)部的某處必須空閑地等待來自另一個(gè)進(jìn)程的結(jié)果,例如查詢數(shù)據(jù)庫、讀取文件或獲取數(shù)據(jù)來自網(wǎng)絡(luò)。


您可以使用 async await 來做其他事情,而不是無所事事地等待,直到您真正需要數(shù)據(jù)庫中的結(jié)果為止。


您可以通過啟動(dòng)任務(wù)來執(zhí)行此操作,而無需等待。該線程不會(huì)空閑地等待數(shù)據(jù)庫,而是繼續(xù)處理您的語句,直到您需要結(jié)果并等待任務(wù)。


private async Task<Tuple<int, int, int, int>> CheckStatus()

{

    // Get the retirements, do not await yet.

    Task<int> taskGetRetirements = GetRetirementsAsync();


    // instead of waiting idly, your thread is free to do the following:

    int out = 0;

    int stage = 0;

    int retired = 0;

    int stop = 0;

    for (int i = 0; i < Dgv.Rows.Count; i++)

    {

        ...

    }


    // now you need the retirements; await for the task to finish

    int retired = await taskGetRetirements;

    stage = stage - retired;

    return new Tuple<int, int, int,int>(out, stage, retired, stop);

}


查看完整回答
反對(duì) 回復(fù) 2022-11-13
  • 4 回答
  • 0 關(guān)注
  • 132 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)