Návod: přístup k webu pomocí modifikátoru Async a operátoru Await (Visual Basic)
Asynchronní programy můžete napsat snadněji a intuitivnější pomocí funkcí Async/await. Můžete napsat asynchronní kód, který vypadá jako synchronní kód, a nechat kompilátor zpracovávat obtížné funkce zpětného volání a pokračování, které obvykle zahrnuje asynchronní kód.
Další informace o funkci Async naleznete v tématu asynchronní programování s Async a await (Visual Basic).
tento návod začíná s aplikací synchronní Windows Presentation Foundation (WPF), která sečte počet bajtů v seznamu webů. Návod pak převede aplikaci na asynchronní řešení pomocí nových funkcí.
Můžete vyvíjet aplikace buď dokončením návodu, nebo stažením ukázky z prohlížeče .NET Sample. Vzorový kód je v projektu SerialAsyncExample .
V tomto návodu provedete následující úlohy:
- Vytvoření aplikace WPF
- Návrh jednoduchého MainWindow WPF
- Přidat odkaz
- Přidat nezbytné příkazy Imports
- Vytvoření synchronní aplikace
- Test synchronního řešení
- Převést GetURLContents na asynchronní metodu
- Převést SumPageSizes na asynchronní metodu
- Převést startButton_Click na asynchronní metodu
- Testování asynchronního řešení
- nahraďte metodu GetURLContentsAsync metodou .NET Framework.
Kompletní asynchronní příklad najdete v části příklad .
Požadavky
v počítači musí být nainstalováno Visual Studio 2012 nebo novější. další informace najdete na stránce Visual Studio ke stažení .
Vytvoření aplikace WPF
Spusťte Visual Studio.
na řádku nabídek klikněte na položku soubor, nový Project.
otevře se dialogové okno nový Project .
v podokně nainstalované šablony zvolte možnost Visual Basic a v seznamu typů projektů zvolte možnost aplikace WPF .
Do textového pole název zadejte
AsyncExampleWPFa pak klikněte na tlačítko OK .Nový projekt se zobrazí v Průzkumník řešení.
Návrh jednoduchého MainWindow WPF
v editoru Visual Studio Code klikněte na kartu MainWindow. xaml .
Pokud není okno panelu nástrojů viditelné, otevřete nabídku zobrazení a zvolte možnost Sada nástrojů.
Přidejte ovládací prvek tlačítko a ovládací prvek TextBox do okna MainWindow .
Zvýrazněte ovládací prvek TextBox a v okně vlastnosti nastavte následující hodnoty:
Nastavte vlastnost název na
resultsTextBox.Nastavte vlastnost Height na 250.
Nastavte vlastnost Width na 500.
Na kartě text zadejte Neproporcionální písmo, například Lucida konzolu nebo globální neproporcionální.
Zvýrazněte ovládací prvek tlačítko a v okně vlastnosti nastavte následující hodnoty:
Nastavte vlastnost název na
startButton.Změňte hodnotu vlastnosti obsah z tlačítka na Spustit.
Umístěte textové pole a tlačítko tak, aby se obě zobrazily v okně MainWindow .
Další informace o Návrhář XAML WPF naleznete v tématu Vytvoření uživatelského rozhraní pomocí Návrhář XAML.
Přidat odkaz
V Průzkumník řešení zvýrazněte název svého projektu.
na panelu nabídek vyberte Project, přidat odkaz.
Zobrazí se dialogové okno Správce odkazů .
v horní části dialogového okna ověřte, zda je projekt cílen na .NET Framework 4,5 nebo vyšší.
V oblasti sestavení vyberte možnost rozhraní , pokud již není zvolena.
V seznamu názvů vyberte zaškrtávací políčko System .NET. http .
Kliknutím na tlačítko OK zavřete dialogové okno.
Přidat nezbytné příkazy Imports
V Průzkumník řešení otevřete místní nabídku pro MainWindow. XAML. vb a pak zvolte Zobrazit kód.
Přidejte následující
Importspříkazy v horní části souboru kódu, pokud již nejsou přítomny.Imports System.Net.Http Imports System.Net Imports System.IO
Vytvoření synchronní aplikace
V okně návrh MainWindow. XAML dvakrát klikněte na tlačítko Start a vytvořte
startButton_Clickobslužnou rutinu události v souboru MainWindow. XAML. vb.V souboru MainWindow. XAML. vb zkopírujte následující kód do textu
startButton_Click:resultsTextBox.Clear() SumPageSizes() resultsTextBox.Text &= vbCrLf & "Control returned to startButton_Click."Kód volá metodu, která řídí aplikaci,
SumPageSizesa zobrazí zprávu, když se ovládací prvek vrátí dostartButton_Click.Kód pro synchronní řešení obsahuje následující čtyři metody:
SumPageSizes, který získá seznam adres URL webových stránek zSetUpURLLista potom zavoláGetURLContentsaDisplayResultszpracuje každou adresu URL.SetUpURLList, který provede a vrátí seznam webových adres.GetURLContents, který stáhne obsah jednotlivých webů a vrátí obsah jako bajtové pole.DisplayResultszobrazuje počet bajtů v bajtovém poli pro každou adresu URL.
Zkopírujte následující čtyři metody a pak je vložte pod
startButton_Clickobslužnou rutinu události v souboru MainWindow. XAML. vb:Private Sub SumPageSizes() ' Make a list of web addresses. Dim urlList As List(Of String) = SetUpURLList() Dim total = 0 For Each url In urlList ' GetURLContents returns the contents of url as a byte array. Dim urlContents As Byte() = GetURLContents(url) DisplayResults(url, urlContents) ' Update the total. total += urlContents.Length Next ' Display the total count for all of the web addresses. resultsTextBox.Text &= String.Format(vbCrLf & vbCrLf & "Total bytes returned: {0}" & vbCrLf, total) End Sub Private Function SetUpURLList() As List(Of String) Dim urls = New List(Of String) From { "https://msdn.microsoft.com/library/windows/apps/br211380.aspx", "https://msdn.microsoft.com", "https://msdn.microsoft.com/library/hh290136.aspx", "https://msdn.microsoft.com/library/ee256749.aspx", "https://msdn.microsoft.com/library/hh290138.aspx", "https://msdn.microsoft.com/library/hh290140.aspx", "https://msdn.microsoft.com/library/dd470362.aspx", "https://msdn.microsoft.com/library/aa578028.aspx", "https://msdn.microsoft.com/library/ms404677.aspx", "https://msdn.microsoft.com/library/ff730837.aspx" } Return urls End Function Private Function GetURLContents(url As String) As Byte() ' The downloaded resource ends up in the variable named content. Dim content = New MemoryStream() ' Initialize an HttpWebRequest for the current URL. Dim webReq = CType(WebRequest.Create(url), HttpWebRequest) ' Send the request to the Internet resource and wait for ' the response. ' Note: you can't use HttpWebRequest.GetResponse in a Windows Store app. Using response As WebResponse = webReq.GetResponse() ' Get the data stream that is associated with the specified URL. Using responseStream As Stream = response.GetResponseStream() ' Read the bytes in responseStream and copy them to content. responseStream.CopyTo(content) End Using End Using ' Return the result as a byte array. Return content.ToArray() End Function Private Sub DisplayResults(url As String, content As Byte()) ' Display the length of each website. The string format ' is designed to be used with a monospaced font, such as ' Lucida Console or Global Monospace. Dim bytes = content.Length ' Strip off the "https://". Dim displayURL = url.Replace("https://", "") resultsTextBox.Text &= String.Format(vbCrLf & "{0,-58} {1,8}", displayURL, bytes) End Sub
Test synchronního řešení
Zvolte klávesu F5 ke spuštění programu a pak klikněte na tlačítko Start .
Měl by se zobrazit výstup, který se podobá následujícímu seznamu:
msdn.microsoft.com/library/windows/apps/br211380.aspx 383832 msdn.microsoft.com 33964 msdn.microsoft.com/library/hh290136.aspx 225793 msdn.microsoft.com/library/ee256749.aspx 143577 msdn.microsoft.com/library/hh290138.aspx 237372 msdn.microsoft.com/library/hh290140.aspx 128279 msdn.microsoft.com/library/dd470362.aspx 157649 msdn.microsoft.com/library/aa578028.aspx 204457 msdn.microsoft.com/library/ms404677.aspx 176405 msdn.microsoft.com/library/ff730837.aspx 143474 Total bytes returned: 1834802 Control returned to startButton_Click.Všimněte si, že pro zobrazení počtů trvá několik sekund. Během této doby je vlákno uživatelského rozhraní blokované při čekání na stažení požadovaných prostředků. V důsledku toho nebudete moct okno zobrazení po kliknutí na tlačítko Start přesunout, maximalizovat, minimalizovat ani ani zavřít. Tato snaha selže, dokud se nezobrazují počty bajtů. Pokud web neodpovídá, nemusíte mít žádné informace o tom, který web selhal. Je obtížné dokonce ukončit čekání a ukončit program.
Převést GetURLContents na asynchronní metodu
Chcete-li převést synchronní řešení na asynchronní řešení, je nejlepší místo, kde je spuštěno,
GetURLContentsprotože volání HttpWebRequest.GetResponse metody a Stream.CopyTo metody jsou místo, kde aplikace přistupuje k webu. .NET Framework usnadňuje převod tím, že poskytuje asynchronní verze obou metod.Další informace o metodách, které jsou používány v nástroji
GetURLContents, naleznete v tématu WebRequest .Poznámka
Při provedení kroků v tomto návodu se zobrazí několik chyb kompilátoru. Můžete je ignorovat a pokračovat v tomto návodu.
Změňte metodu, která je volána na třetím řádku
GetURLContentsodGetResponsedo asynchronní metody založené na úlohách GetResponseAsync .Using response As WebResponse = webReq.GetResponseAsync()GetResponseAsyncVrátí Task<TResult> . V tomto případě má vrácená proměnná úlohyTResulttyp WebResponse . Úkol je příslib k vytvoření skutečnéhoWebResponseobjektu po stažení požadovaných dat a dokončení úlohy.Chcete-li načíst
WebResponsehodnotu z úkolu, použijte operátor await pro volání metodyGetResponseAsync, jak ukazuje následující kód.Using response As WebResponse = Await webReq.GetResponseAsync()AwaitOperátor pozastaví provádění aktuální metody,GetURLContentsdokud není dokončen očekávaný úkol. Mezitím se ovládací prvek vrátí volajícímu aktuální metody. V tomto příkladu je aktuální metodaGetURLContentsa volající jeSumPageSizes. Po dokončení úkolu je přislíbenýWebResponseobjekt vytvořen jako hodnota očekávaného úkolu a přiřazený k proměnnéresponse.Předchozí příkaz může být rozdělen do následujících dvou příkazů k objasnění toho, co se stane.
Dim responseTask As Task(Of WebResponse) = webReq.GetResponseAsync() Using response As WebResponse = Await responseTaskVolání
webReq.GetResponseAsyncfunkce vrátíTask(Of WebResponse)neboTask<WebResponse>. PakAwaitse pro úlohu použije operátor, aby se načetlaWebResponsehodnota.Pokud vaše asynchronní metoda funguje na to, že nezávisí na dokončení úlohy, může metoda pokračovat v práci s těmito dvěma příkazy po volání asynchronní metody a před použitím operátoru await. příklady naleznete v tématu How to: revícenásobné webové požadavky paralelně pomocí Async a Await (Visual Basic) a postupy: rozšíříte-li asynchronní návod pomocí Task. WhenAll (Visual Basic).
Protože jste přidali
Awaitoperátor v předchozím kroku, dojde k chybě kompilátoru. Operátor lze použít pouze v metodách, které jsou označeny modifikátorem Async . Ignorujte chybu při opakování kroků převodu k nahrazení voláníCopyTovoláním metodyCopyToAsync.Změňte název metody, na kterou se volá CopyToAsync .
CopyToMetoda neboCopyToAsynckopíruje bajty do svého argumentu,contenta nevrací smysluplnou hodnotu. V synchronní verzi je volání naCopyTojednoduchý příkaz, který nevrací hodnotu. Asynchronní verze,CopyToAsyncvrátí a Task . Úkol funguje jako "Task (void)" a umožňuje, aby metoda byla očekávána. PoužijteAwaitneboawaitna voláníCopyToAsync, jak ukazuje následující kód.Await responseStream.CopyToAsync(content)Předchozí příkaz zkracuje následující dva řádky kódu.
' CopyToAsync returns a Task, not a Task<T>. Dim copyTask As Task = responseStream.CopyToAsync(content) ' When copyTask is completed, content contains a copy of ' responseStream. Await copyTask
Vše, co je potřeba udělat v nástroji,
GetURLContentsje úprava signatury metody. Operátor lze použítAwaitpouze v metodách, které jsou označeny modifikátorem Async . Přidejte modifikátor k označení metody jako asynchronní metody, jak ukazuje následující kód.Private Async Function GetURLContents(url As String) As Byte()Návratový typ asynchronní metody může být pouze Task , Task<TResult> . v Visual Basic musí být metoda
Function, která vracíTaskneboTask(Of T), nebo metoda musí býtSub.SubMetoda je typicky používána pouze v asynchronní obslužné rutině události, kdeSubje to požadováno. V ostatních případech použijete,Task(T)Pokud má metoda Completed návratový příkaz, který vrací hodnotu typu T, a použijete,TaskPokud metoda Completed nevrátí smysluplnou hodnotu.Další informace naleznete v tématu Async Return Types (Visual Basic).
Metoda
GetURLContentsobsahuje příkaz return a příkaz vrátí bajtové pole. Proto návratový typ asynchronní verze je Task (T), kde T je pole bajtů. V signatuře metody proveďte následující změny:Změňte návratový typ na
Task(Of Byte()).Podle konvence mají asynchronní metody názvy, které končí na "Async", proto přejmenujte metodu
GetURLContentsAsync.
Následující kód tyto změny znázorňuje.
Private Async Function GetURLContentsAsync(url As String) As Task(Of Byte())U těchto několika změn
GetURLContentsje převod na asynchronní metodu dokončen.
Převést SumPageSizes na asynchronní metodu
Opakujte kroky z předchozího postupu pro
SumPageSizes. Nejprve změňte volání naGetURLContentsasynchronní volání.Změňte název metody, která je volána z
GetURLContentsnaGetURLContentsAsync, pokud jste tak již neučinili.Použijte
Awaitu úlohy, která seGetURLContentsAsyncvrátí k získání hodnoty bajtového pole.
Následující kód tyto změny znázorňuje.
Dim urlContents As Byte() = Await GetURLContentsAsync(url)Předchozí přiřazení zkracuje následující dva řádky kódu.
' GetURLContentsAsync returns a task. At completion, the task ' produces a byte array. Dim getContentsTask As Task(Of Byte()) = GetURLContentsAsync(url) Dim urlContents As Byte() = Await getContentsTaskV signatuře metody proveďte následující změny:
Označte metodu
Asyncmodifikátorem.Do názvu metody přidejte "Async".
V tuto chvíli neexistuje žádná vrácená proměnná úlohy, T, protože
SumPageSizesAsyncnevrací hodnotu pro T. (metoda nemá žádnýReturnpříkaz.) Metoda však musí vracet,Taskaby bylo možné očekávat. Proto změňte typ metody zSubnaFunction. Návratový typ funkce jeTask.
Následující kód tyto změny znázorňuje.
Private Async Function SumPageSizesAsync() As TaskPřevod
SumPageSizesnaSumPageSizesAsyncje dokončen.
Převést startButton_Click na asynchronní metodu
V obslužné rutině události změňte název volané metody z
SumPageSizesnaSumPageSizesAsync, pokud jste to ještě neudělali.Vzhledem k tomu
SumPageSizesAsync, že je asynchronní metoda, změňte kód v obslužné rutině události tak, aby čekal na výsledek.Volání
SumPageSizesAsynczrcadlí volání doCopyToAsyncvGetURLContentsAsync. Volání vrátí aTask, nikoliTask(T).Stejně jako v předchozích postupech lze volání převést pomocí jednoho příkazu nebo dvou příkazů. Následující kód tyto změny znázorňuje.
' One-step async call. Await SumPageSizesAsync() ' Two-step async call. Dim sumTask As Task = SumPageSizesAsync() Await sumTaskChcete-li zabránit nechtěnému znovu zadat operaci, přidejte následující příkaz v horní části,
startButton_Clickčímž zakážete tlačítko Start .' Disable the button until the operation is complete. startButton.IsEnabled = FalseTlačítko lze znovu povolit na konci obslužné rutiny události.
' Reenable the button in case you want to run the operation again. startButton.IsEnabled = TrueDalší informace o Vícenásobný přístup najdete v tématu zpracování Vícenásobný přístup v asynchronních aplikacích (Visual Basic).
Nakonec přidejte
Asyncmodifikátor do deklarace tak, aby mohla obslužná rutina události očekávatSumPagSizesAsync.Async Sub startButton_Click(sender As Object, e As RoutedEventArgs) Handles startButton.ClickNázvy obslužných rutin událostí se typicky nemění. Návratový typ se nezměnil na,
Taskprotože obslužné rutiny události musí býtSubprocedury v Visual Basic.Převod projektu z synchronního na asynchronní zpracování je dokončen.
Testování asynchronního řešení
Zvolte klávesu F5 ke spuštění programu a pak klikněte na tlačítko Start .
Měl by se zobrazit výstup, který se podobá výstupu synchronního řešení. Všimněte si ale následujících rozdílů.
Po dokončení zpracování se všechny výsledky neprojeví ve stejnou dobu. Například oba programy obsahují řádek
startButton_Click, který vymaže textové pole. Záměrem je vymazat textové pole mezi spuštěním, pokud zvolíte tlačítko Spustit pro druhý čas, poté, co se objeví jedna sada výsledků. V synchronní verzi je textové pole vymazáno těsně před tím, než se počty zobrazí podruhé, po dokončení stahování a vlákno uživatelského rozhraní je volné pro další práci. V asynchronní verzi se textové pole vymaže ihned po kliknutí na tlačítko Start .Ve většině případů není vlákno UI během stahování zablokované. Během stahování, počítání a zobrazování webových prostředků můžete okno přesunout nebo změnit jeho velikost. Pokud je jeden z webů pomalý nebo neodpovídá, můžete operaci zrušit výběrem tlačítka Zavřít (x v poli červené v pravém horním rohu).
nahraďte metodu GetURLContentsAsync metodou .NET Framework.
.NET Framework poskytuje mnoho asynchronních metod, které můžete použít. Jedna z nich, HttpClient.GetByteArrayAsync(String) metoda, dělá přesně to, co potřebujete pro tento návod. Místo
GetURLContentsAsyncmetody, kterou jste vytvořili v předchozím postupu, ji můžete použít.Prvním krokem je vytvoření HttpClient objektu v
SumPageSizesAsyncmetodě. Přidejte následující deklaraci na začátek metody.' Declare an HttpClient object and increase the buffer size. The ' default buffer size is 65,536. Dim client As HttpClient = New HttpClient() With {.MaxResponseContentBufferSize = 1000000}V
SumPageSizesAsync,části nahraďte voláníGetURLContentsAsyncmetody volánímHttpClientmetody.Dim urlContents As Byte() = Await client.GetByteArrayAsync(url)Odeberte nebo zakomentujte
GetURLContentsAsyncmetodu, kterou jste napsali.Zvolte klávesu F5 ke spuštění programu a pak klikněte na tlačítko Start .
Chování této verze projektu by se mělo shodovat s chováním, které popisuje postup testování asynchronního řešení, ale s ještě menším úsilím.
Příklad
Následuje úplný příklad převedeného asynchronního řešení, které používá asynchronní GetURLContentsAsync metodu. Všimněte si, že se silně podobá původnímu synchronnímu řešení.
' Add the following Imports statements, and add a reference for System.Net.Http.
Imports System.Net.Http
Imports System.Net
Imports System.IO
Class MainWindow
Async Sub startButton_Click(sender As Object, e As RoutedEventArgs) Handles startButton.Click
' Disable the button until the operation is complete.
startButton.IsEnabled = False
resultsTextBox.Clear()
'' One-step async call.
Await SumPageSizesAsync()
' Two-step async call.
'Dim sumTask As Task = SumPageSizesAsync()
'Await sumTask
resultsTextBox.Text &= vbCrLf & "Control returned to button1_Click."
' Reenable the button in case you want to run the operation again.
startButton.IsEnabled = True
End Sub
Private Async Function SumPageSizesAsync() As Task
' Make a list of web addresses.
Dim urlList As List(Of String) = SetUpURLList()
Dim total = 0
For Each url In urlList
Dim urlContents As Byte() = Await GetURLContentsAsync(url)
' The previous line abbreviates the following two assignment statements.
'//<snippet21>
' GetURLContentsAsync returns a task. At completion, the task
' produces a byte array.
'Dim getContentsTask As Task(Of Byte()) = GetURLContentsAsync(url)
'Dim urlContents As Byte() = Await getContentsTask
DisplayResults(url, urlContents)
' Update the total.
total += urlContents.Length
Next
' Display the total count for all of the websites.
resultsTextBox.Text &= String.Format(vbCrLf & vbCrLf &
"Total bytes returned: {0}" & vbCrLf, total)
End Function
Private Function SetUpURLList() As List(Of String)
Dim urls = New List(Of String) From
{
"https://msdn.microsoft.com/library/windows/apps/br211380.aspx",
"https://msdn.microsoft.com",
"https://msdn.microsoft.com/library/hh290136.aspx",
"https://msdn.microsoft.com/library/ee256749.aspx",
"https://msdn.microsoft.com/library/hh290138.aspx",
"https://msdn.microsoft.com/library/hh290140.aspx",
"https://msdn.microsoft.com/library/dd470362.aspx",
"https://msdn.microsoft.com/library/aa578028.aspx",
"https://msdn.microsoft.com/library/ms404677.aspx",
"https://msdn.microsoft.com/library/ff730837.aspx"
}
Return urls
End Function
Private Async Function GetURLContentsAsync(url As String) As Task(Of Byte())
' The downloaded resource ends up in the variable named content.
Dim content = New MemoryStream()
' Initialize an HttpWebRequest for the current URL.
Dim webReq = CType(WebRequest.Create(url), HttpWebRequest)
' Send the request to the Internet resource and wait for
' the response.
Using response As WebResponse = Await webReq.GetResponseAsync()
' The previous statement abbreviates the following two statements.
'Dim responseTask As Task(Of WebResponse) = webReq.GetResponseAsync()
'Using response As WebResponse = Await responseTask
' Get the data stream that is associated with the specified URL.
Using responseStream As Stream = response.GetResponseStream()
' Read the bytes in responseStream and copy them to content.
Await responseStream.CopyToAsync(content)
' The previous statement abbreviates the following two statements.
' CopyToAsync returns a Task, not a Task<T>.
'Dim copyTask As Task = responseStream.CopyToAsync(content)
' When copyTask is completed, content contains a copy of
' responseStream.
'Await copyTask
End Using
End Using
' Return the result as a byte array.
Return content.ToArray()
End Function
Private Sub DisplayResults(url As String, content As Byte())
' Display the length of each website. The string format
' is designed to be used with a monospaced font, such as
' Lucida Console or Global Monospace.
Dim bytes = content.Length
' Strip off the "https://".
Dim displayURL = url.Replace("https://", "")
resultsTextBox.Text &= String.Format(vbCrLf & "{0,-58} {1,8}", displayURL, bytes)
End Sub
End Class
Následující kód obsahuje úplný příklad řešení, které používá HttpClient metodu, GetByteArrayAsync .
' Add the following Imports statements, and add a reference for System.Net.Http.
Imports System.Net.Http
Imports System.Net
Imports System.IO
Class MainWindow
Async Sub startButton_Click(sender As Object, e As RoutedEventArgs) Handles startButton.Click
resultsTextBox.Clear()
' Disable the button until the operation is complete.
startButton.IsEnabled = False
' One-step async call.
Await SumPageSizesAsync()
' Two-step async call.
'Dim sumTask As Task = SumPageSizesAsync()
'Await sumTask
resultsTextBox.Text &= vbCrLf & "Control returned to button1_Click."
' Reenable the button in case you want to run the operation again.
startButton.IsEnabled = True
End Sub
Private Async Function SumPageSizesAsync() As Task
' Declare an HttpClient object and increase the buffer size. The
' default buffer size is 65,536.
Dim client As HttpClient =
New HttpClient() With {.MaxResponseContentBufferSize = 1000000}
' Make a list of web addresses.
Dim urlList As List(Of String) = SetUpURLList()
Dim total = 0
For Each url In urlList
' GetByteArrayAsync returns a task. At completion, the task
' produces a byte array.
Dim urlContents As Byte() = Await client.GetByteArrayAsync(url)
' The following two lines can replace the previous assignment statement.
'Dim getContentsTask As Task(Of Byte()) = client.GetByteArrayAsync(url)
'Dim urlContents As Byte() = Await getContentsTask
DisplayResults(url, urlContents)
' Update the total.
total += urlContents.Length
Next
' Display the total count for all of the websites.
resultsTextBox.Text &= String.Format(vbCrLf & vbCrLf &
"Total bytes returned: {0}" & vbCrLf, total)
End Function
Private Function SetUpURLList() As List(Of String)
Dim urls = New List(Of String) From
{
"https://msdn.microsoft.com/library/windows/apps/br211380.aspx",
"https://msdn.microsoft.com",
"https://msdn.microsoft.com/library/hh290136.aspx",
"https://msdn.microsoft.com/library/ee256749.aspx",
"https://msdn.microsoft.com/library/hh290138.aspx",
"https://msdn.microsoft.com/library/hh290140.aspx",
"https://msdn.microsoft.com/library/dd470362.aspx",
"https://msdn.microsoft.com/library/aa578028.aspx",
"https://msdn.microsoft.com/library/ms404677.aspx",
"https://msdn.microsoft.com/library/ff730837.aspx"
}
Return urls
End Function
Private Sub DisplayResults(url As String, content As Byte())
' Display the length of each website. The string format
' is designed to be used with a monospaced font, such as
' Lucida Console or Global Monospace.
Dim bytes = content.Length
' Strip off the "https://".
Dim displayURL = url.Replace("https://", "")
resultsTextBox.Text &= String.Format(vbCrLf & "{0,-58} {1,8}", displayURL, bytes)
End Sub
End Class
Viz také
- Asynchronní Ukázka: přístup k webovému návodu (C# a Visual Basic)
- Await – operátor
- Async
- Asynchronní programování s modifikátorem Async a operátoru Await (Visual Basic)
- Asynchronní návratové typy (Visual Basic)
- Asynchronní programování založené na úlohách (klepnutím)
- Postupy: roztažení asynchronního návodu pomocí Task. WhenAll (Visual Basic)
- Postupy: paralelní provádění více webových požadavků pomocí modifikátoru Async a operátoru Await (Visual Basic)