Aszinkron tevékenységek megszakítása egy adott időszak után (Visual Basic)
Ha nem szeretné megvárni a művelet befejezését, a metódussal CancellationTokenSource.CancelAfter megszakíthat egy aszinkron műveletet egy idő után. Ez a módszer ütemezi a kifejezés által meghatározott időtartamon belül nem befejezett társított tevékenységek törlését CancelAfter
.
Ez a példa hozzáadja a Mégse aszinkron feladat vagy a Feladatok listája (Visual Basic) szolgáltatásban kifejlesztett kódot a webhelyek listájának letöltéséhez és az egyes feladatok tartalmának megjelenítéséhez.
Feljegyzés
A példák futtatásához telepítve kell lennie a Visual Studio 2012 vagy újabb verziójának, valamint a .NET-keretrendszer 4.5-ös vagy újabb verziójának.
A példa letöltése
Töltse le a teljes Windows megjelenítési alaprendszer (WPF) projektet az Async-mintából: Az alkalmazás finomhangolása, majd kövesse az alábbi lépéseket.
Bontsa ki a letöltött fájlt, majd indítsa el a Visual Studiót.
A menüsávon válassza a Fájl, Megnyitás, Projekt/Megoldás lehetőséget.
A Projekt megnyitása párbeszédpanelen nyissa meg a kibontott mintakódot tartalmazó mappát, majd nyissa meg az AsyncFineTuningVB megoldásfájlját (.sln).
A Megoldáskezelő nyissa meg a CancelAfterTime projekt helyi menüjét, majd válassza a Beállítás kezdőprojektként lehetőséget.
A projekt futtatásához válassza az F5 billentyűt.
A Ctrl+F5 billentyűkombinációval hibakeresés nélkül futtathatja a projektet.
Futtassa többször a programot annak ellenőrzéséhez, hogy a kimenet minden webhely, webhely vagy webhely kimenetét megjeleníti-e.
Ha nem szeretné letölteni a projektet, a témakör végén áttekintheti a MainWindow.xaml.vb fájlt.
A példa létrehozása
A jelen témakörben szereplő példa hozzáadja a Mégse aszinkron tevékenység vagy a Tevékenységek listája (Visual Basic) programban kifejlesztett projekthez a tevékenységek listájának törléséhez. A példa ugyanazt a felhasználói felületet használja, bár a Mégse gombot nem használja explicit módon.
Ha saját maga szeretné létrehozni a példát, kövesse a "Példa letöltése" szakaszban található utasításokat, de startUp projektként válassza a CancelAListOfTasks lehetőséget. Adja hozzá a jelen témakör módosításait a projekthez.
Ha meg szeretné adni a tevékenységek megszakításként való megjelölésének maximális idejét, adjon hozzá egy hívást CancelAfter
startButton_Click
a következő példához. Az összeadás csillaggal van megjelölve.
Private Async Sub startButton_Click(sender As Object, e As RoutedEventArgs)
' Instantiate the CancellationTokenSource.
cts = New CancellationTokenSource()
resultsTextBox.Clear()
Try
' ***Set up the CancellationTokenSource to cancel after 2.5 seconds. (You
' can adjust the time.)
cts.CancelAfter(2500)
Await AccessTheWebAsync(cts.Token)
resultsTextBox.Text &= vbCrLf & "Downloads complete."
Catch ex As OperationCanceledException
resultsTextBox.Text &= vbCrLf & "Downloads canceled." & vbCrLf
Catch ex As Exception
resultsTextBox.Text &= vbCrLf & "Downloads failed." & vbCrLf
End Try
' Set the CancellationTokenSource to Nothing when the download is complete.
cts = Nothing
End Sub
Futtassa többször a programot annak ellenőrzéséhez, hogy a kimenet minden webhely, webhely vagy webhely kimenetét megjeleníti-e. A következő kimenet egy minta:
Length of the downloaded string: 35990.
Length of the downloaded string: 407399.
Length of the downloaded string: 226091.
Downloads canceled.
Példa kitöltése
Az alábbi kód a példához tartozó MainWindow.xaml.vb fájl teljes szövege. Csillag jelöli a példához hozzáadott elemeket.
Figyelje meg, hogy hozzá kell adnia egy hivatkozást a következőhöz System.Net.Http: .
A projektet az Async-mintából töltheti le: Az alkalmazás finomhangolása.
' Add an Imports directive and a reference for System.Net.Http.
Imports System.Net.Http
' Add the following Imports directive for System.Threading.
Imports System.Threading
Class MainWindow
' Declare a System.Threading.CancellationTokenSource.
Dim cts As CancellationTokenSource
Private Async Sub startButton_Click(sender As Object, e As RoutedEventArgs)
' Instantiate the CancellationTokenSource.
cts = New CancellationTokenSource()
resultsTextBox.Clear()
Try
' ***Set up the CancellationTokenSource to cancel after 2.5 seconds. (You
' can adjust the time.)
cts.CancelAfter(2500)
Await AccessTheWebAsync(cts.Token)
resultsTextBox.Text &= vbCrLf & "Downloads complete."
Catch ex As OperationCanceledException
resultsTextBox.Text &= vbCrLf & "Downloads canceled." & vbCrLf
Catch ex As Exception
resultsTextBox.Text &= vbCrLf & "Downloads failed." & vbCrLf
End Try
' Set the CancellationTokenSource to Nothing when the download is complete.
cts = Nothing
End Sub
' You can still include a Cancel button if you want to.
Private Sub cancelButton_Click(sender As Object, e As RoutedEventArgs)
If cts IsNot Nothing Then
cts.Cancel()
End If
End Sub
' Provide a parameter for the CancellationToken.
' Change the return type to Task because the method has no return statement.
Async Function AccessTheWebAsync(ct As CancellationToken) As Task
Dim client As HttpClient = New HttpClient()
' Call SetUpURLList to make a list of web addresses.
Dim urlList As List(Of String) = SetUpURLList()
' Process each element in the list of web addresses.
For Each url In urlList
' GetAsync returns a Task(Of HttpResponseMessage).
' Argument ct carries the message if the Cancel button is chosen.
' Note that the Cancel button can cancel all remaining downloads.
Dim response As HttpResponseMessage = Await client.GetAsync(url, ct)
' Retrieve the website contents from the HttpResponseMessage.
Dim urlContents As Byte() = Await response.Content.ReadAsByteArrayAsync()
resultsTextBox.Text &=
vbCrLf & $"Length of the downloaded string: {urlContents.Length}." & vbCrLf
Next
End Function
' Add a method that creates a list of web addresses.
Private Function SetUpURLList() As List(Of String)
Dim urls = New List(Of String) From
{
"https://msdn.microsoft.com",
"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
End Class
' Sample output:
' Length of the downloaded string: 35990.
' Length of the downloaded string: 407399.
' Length of the downloaded string: 226091.
' Downloads canceled.
Lásd még
- Aszinkron programozás Async és Await használatával (Visual Basic)
- Útmutató: A web elérése az Async és a Await használatával (Visual Basic)
- Aszinkron tevékenység vagy tevékenységek listájának lemondása (Visual Basic)
- Az Async-alkalmazás finomhangolása (Visual Basic)
- Aszinkron minta: Az alkalmazás finomhangolása
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: