#vb.net #parallel-processing
Вопрос:
Imports System.Net
Public Class Form1
Dim fileReader As String
Dim t As String()
Dim strami As String = ""
Dim s, r As String()
Dim orfWriter As System.IO.StreamWriter
Dim local As String
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
fileReader = My.Computer.FileSystem.ReadAllText("G:test.txt")
RichTextBox1.Text = fileReader
Dim urls() As String = RichTextBox1.Lines
Parallel.ForEach(urls, Sub(f)
If Not String.IsNullOrEmpty(f) Then
t = f.Split(",")
name = t(0)
't(1)=web address of Name
DownloadAsync(t(1))
End If
End Sub)
My.Computer.Audio.PlaySystemSound(
System.Media.SystemSounds.Asterisk)
MsgBox("All Done!")
End Sub
Function DownloadAsync(URL As String) As Task(Of Boolean)
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
Dim html As String = ""
Dim result As Boolean
Dim request As HttpWebRequest = HttpWebRequest.Create(URL)
request.AutomaticDecompression = DecompressionMethods.GZip
request.Timeout = 500
request.Method = "GET"
request.UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0"
Using response As Task(Of WebResponse) = request.GetResponseAsync
If response.Result IsNot Nothing Then
Using ioStream As IO.Stream = response.Result.GetResponseStream
Using sr As New System.IO.StreamReader(ioStream)
html = sr.ReadToEnd
s = html.Split(";")
r = s(0).Split(",")
'///////////////////
local = "G:" amp; Name.ToString ".csv"
orfWriter = New System.IO.StreamWriter(local, True, System.Text.Encoding.Unicode)
strami = r(0) amp; "," amp; r(1) amp; "," amp; r(2) amp; "," amp; r(3)
orfWriter.Write(strami)
orfWriter.WriteLine("")
orfWriter.Close()
End Using
result = True
End Using
End If
End Using
Return Task.FromResult(result)
Return Task.FromResult(False)
End Function
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
End Class
В этой программе информация об URL-адресах в «G:test.txt» загружаются одновременно, и я хочу, чтобы информация была сохранена по ее собственному адресу, в файле с ее именем(т. е. имя=t(0)). Но вся информация об URL-адресах сохраняется только в одном файле, называемом именем последней строки richTextBox1.Lines. Как можно решить эту проблему? Спасибо
Комментарии:
1. Рассматривали ли вы возможность передачи аргумента с именем файла в подпрограмму, которая будет записывать файл, вместо того, чтобы пытаться сделать это через глобальную переменную? Кроме того, ваша так называемая асинхронная функция вообще не является асинхронной. Вы не ждете чего-то и не возвращаете a
Task
из другой асинхронной функции.2. Мне кажется, что у них есть ряд переменных, которые могут и должны быть локальными для синхронизации загрузки. Возможно, это не настоящая проблема, но она не поможет
3. @Крейг, пожалуйста, напиши мне ответ.