Huhu zusammen, ich stehe vor einer Aufgabe die ich bisher immer mit Events und ggf. ner Parent Klasse gelöst habe.
Wie würdet ihr nun diese Aufgabe mit Tasks lösen?
Wir haben zum Beispiel einen Webservice der gleichzeitig von mehreren (virtuellen) Clients angesprochen werden soll, jede Response enthält Daten (zur Vereinfachung als Typ String.. Im Live Betrieb sind das natürlich komplexere Daten).
Statt jetzt sowas hier zu machen und somit alle Clients hintereinander abzuarbeiten:
würde ich gerne so (oder ähnlich) vorgehen, dass diese Requests gleichzeitig stattfinden, ich aber irgendwie gesammelt an einer Stelle nach die Antworten bekomme:
Kann jemand ggf. seine Ideen mit einbringen, würde mich freuen ;)!
Ich wüsste halt wie ichs anders löse, aber schadet ja nicht nach vorne oder auch mal zur Seite zu schauen.
EDIT:
Ich denke hiermit komm ich meiner gewünschten Lösung schonmal näher:
Alpha-Lösung
Hier noch das PHP Testskript:
Wie würdet ihr nun diese Aufgabe mit Tasks lösen?
Wir haben zum Beispiel einen Webservice der gleichzeitig von mehreren (virtuellen) Clients angesprochen werden soll, jede Response enthält Daten (zur Vereinfachung als Typ String.. Im Live Betrieb sind das natürlich komplexere Daten).
Statt jetzt sowas hier zu machen und somit alle Clients hintereinander abzuarbeiten:
würde ich gerne so (oder ähnlich) vorgehen, dass diese Requests gleichzeitig stattfinden, ich aber irgendwie gesammelt an einer Stelle nach die Antworten bekomme:
Kann jemand ggf. seine Ideen mit einbringen, würde mich freuen ;)!
Ich wüsste halt wie ichs anders löse, aber schadet ja nicht nach vorne oder auch mal zur Seite zu schauen.
EDIT:
Ich denke hiermit komm ich meiner gewünschten Lösung schonmal näher:
VB.NET-Quellcode
- Imports System.Collections.Concurrent
- Public Class Form1
- Private Jobs As New List(Of Job)
- Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Jobs.Clear()
- For i As Integer = 1 To 10
- Jobs.Add(New Job(i))
- Next
- Dim results As New ConcurrentBag(Of String)
- Await Task.Run(Sub()
- Parallel.ForEach(Jobs, Sub(job)
- results.Add(job.Run())
- Console.WriteLine("Finished Job: " & job.ID.ToString())
- End Sub)
- End Sub)
- MessageBox.Show("finished")
- End Sub
- End Class
- Public Class Job
- Public Property ID As Integer
- Public Property Result As String
- Public ReadOnly Property Finished As Boolean
- Get
- Return Result <> ""
- End Get
- End Property
- Sub New(ID As Integer)
- Me.ID = ID
- End Sub
- Public Function Run() As String
- Using wc As New System.Net.WebClient()
- ' schickt die jobid an ein php skript
- ' das skript gibt die jobid via echo aus nachdem es eine zufällig zeit zwischen 1 und 10 sekunden gewartet hat
- Result = wc.DownloadString("http://meineseite.de/test.php?jobid=" & ID.ToString())
- End Using
- Return Result
- End Function
- End Class
Hier noch das PHP Testskript:
Polling is trolling!
Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Rootbob91“ ()