Как мы можем сохранить информацию из нескольких URL-адресов?

#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. @Крейг, пожалуйста, напиши мне ответ.