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

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

我的代碼有什么問(wèn)題(SendPingAsync)

我的代碼有什么問(wèn)題(SendPingAsync)

C#
忽然笑 2023-07-22 15:45:52
我正在編寫一個(gè)C#Ping 應(yīng)用程序。我一開始使用synchronousPing 方法,但我發(fā)現(xiàn)一鍵 ping 多個(gè)服務(wù)器需要越來(lái)越多的時(shí)間。所以我決定嘗試一下這個(gè)asynchronous方法。有人可以幫我嗎?public async Task<string> CustomPing(string ip, int amountOfPackets, int sizeOfPackets){    // timeout    int Timeout = 2000;    // PaketSize logic    string packet = "";    for (int j = 0; j < sizeOfPackets; j++)    {        packet += "b";    };    byte[] buffer = Encoding.ASCII.GetBytes(packet);    // time-var    long ms = 0;    // Main Method    using (Ping ping = new Ping())        for (int i = 0; i < amountOfPackets; i++)        {            PingReply reply = await ping.SendPingAsync(ip, Timeout, buffer);            ms += reply.RoundtripTime;        };    return (ms / amountOfPackets + " ms");};我定義了一個(gè)“服務(wù)器”類(IP 或主機(jī)、城市、國(guó)家/地區(qū))。然后我創(chuàng)建一個(gè)“服務(wù)器”列表:List<Server> ServerList = new List<Server>()            {                new Server("www.google.de", "Some City,", "Some Country")};然后我循環(huán)遍歷這個(gè)列表,并嘗試調(diào)用如下方法:foreach (var server in ServerList)ListBox.Items.Add("The average response time of your custom server is: " + server.CustomPing(server.IP, amountOfPackets, sizeOfPackets));不幸的是,這比方法更具競(jìng)爭(zhēng)力synchronous,并且在我的方法應(yīng)該返回值的地方,它返回System.Threading.Tasks.Taks`1[System.string]
查看完整描述

2 回答

?
吃雞游戲

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

因?yàn)槟阌幸粋€(gè)異步方法,所以當(dāng)它被調(diào)用時(shí)它會(huì)返回任務(wù),如下所示:


Task<string> task = server.CustomPing(server.IP, amountOfPackets, sizeOfPackets);

當(dāng)您將其直接添加到您的ListBox同時(shí)將其與字符串連接時(shí),它將使用該ToString方法,該方法默認(rèn)打印對(duì)象的完整類名。這應(yīng)該解釋你的輸出:


System.Threading.Tasks.Taks`1[System.string]


該[System.string]部分實(shí)際上告訴您任務(wù)結(jié)果的返回類型。這就是你想要的,要得到它,你需要等待!像這樣:


foreach (var server in ServerList)

   ListBox.Items.Add("The average response time of your custom server is: " + await server.CustomPing(server.IP, amountOfPackets, sizeOfPackets));

1)這必須用另一種async方法來(lái)完成并且


2)這會(huì)擾亂你想要的所有并行性。因?yàn)樗鼤?huì)等待每個(gè)方法調(diào)用完成。


你能做的就是依次啟動(dòng)所有任務(wù),收集返回的任務(wù)并等待所有任務(wù)完成。最好您可以在異步方法(如點(diǎn)擊處理程序)中執(zhí)行此操作:


private async void Button1_Click(object sender, EventArgs e)

{

    Task<string> [] allTasks = ServerList.Select(server => server.CustomPing(server.IP, amountOfPackets, sizeOfPackets)).ToArray();

    // WhenAll will wait for all tasks to finish and return the return values of each method call

    string [] results = await Task.WhenAll(allTasks);

    // now you can execute your loop and display the results:

    foreach (var result in results)

    {

        ListBox.Items.Add(result);

    }


}


查看完整回答
反對(duì) 回復(fù) 2023-07-22
?
慕哥9229398

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

該類System.Threading.Tasks.Task<TResult>是多任務(wù)處理的輔助類。雖然它駐留在線程命名空間中,但它也適用于無(wú)線程多任務(wù)處理。事實(shí)上,如果您看到一個(gè)函數(shù)返回一個(gè)任務(wù),您通??梢詫⑺糜谌魏涡问降亩嗳蝿?wù)處理。任務(wù)的使用方式非常不可知。如果您不介意任務(wù)執(zhí)行次數(shù)不多而帶來(lái)的額外開銷,您甚至可以同步運(yùn)行它。

任務(wù)有助于實(shí)現(xiàn)多任務(wù)處理的一些最重要的規(guī)則/慣例:

  • 不要意外吞下異常。眾所周知,線程基多任務(wù)處理在這方面做得很好。

  • 取消后請(qǐng)勿使用結(jié)果

如果您嘗試訪問(wèn)結(jié)果屬性,而約定告訴我們不應(yīng)該這樣做,那么它會(huì)向您拋出異常(通常是聚合異常)來(lái)實(shí)現(xiàn)這一點(diǎn)。

以及具有多任務(wù)處理的所有其他有用屬性。


查看完整回答
反對(duì) 回復(fù) 2023-07-22
  • 2 回答
  • 0 關(guān)注
  • 201 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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