1

我一直在寻找有关异步任务超时设置的信息,但我找不到任何不涉及 wait() 的信息。也许我看错了。

我有一个 API 调用可能需要 10 分钟才能完成文件传输。我产生了一个新线程,因此用户不必坐下来观看这种情况发生。我添加了数据库更新,这样我就可以知道发生了什么。上传开始,几分钟后......什么都没有。传输被中止,没有抛出异常,也没有数据库更新。这一定意味着线程被丢弃了,对吧?我怎样才能让它活得更久?谢谢你的帮助。

Sub up_load(s As Object, e As EventArgs)

    Dim uploadtask As Task = Task.Factory.StartNew(Sub() begin_upload(), TaskCreationOptions.LongRunning)

    lblmsg.Text = "Successfully initiated upload"
End Sub

Sub begin_upload()

    Dim request As New YouTubeRequest(settings)
    Dim vidupload As New Video()
    Dim cmdupdate As SqlCommand

    vidupload.Title = "My Big Test Movie"
    vidupload.Tags.Add(New MediaCategory("Nonprofit", YouTubeNameTable.CategorySchema))
    vidupload.Keywords = "church, jesus"
    vidupload.Description = "See the entire video"
    vidupload.YouTubeEntry.Private = False
    vidupload.YouTubeEntry.setYouTubeExtension("location", "Downers Grove, IL")
    vidupload.YouTubeEntry.MediaSource = New MediaFileSource("c:\users\greg\test3.asf", "video/x-ms-wmv")

    'updates fine
    cmdupdate = New SqlCommand("Update transactions set name='upload started' where transactionid='18'", conHyperData)
    conHyperData.Open()
    cmdupdate.ExecuteNonQuery()
    conHyperData.Close()

    Try

        'very long running task +5 min
        Dim createdVideo As Video = request.Upload(vidupload)

        'never gets here 
        cmdupdate = New SqlCommand("Update transactions set name='upload finished' where transactionid='18'", conHyperData)
        conHyperData.Open()
        cmdupdate.ExecuteNonQuery()
        conHyperData.Close()
    Catch ex As Exception

        'never thrown, transfer aborts
        cmdupdate = New SqlCommand("Update transactions set name=@name where transactionid='18'", conHyperData)
        cmdupdate.Parameters.AddWithValue("@name", "failed - " & ex.ToString)
        conHyperData.Open()
        cmdupdate.ExecuteNonQuery()
        conHyperData.Close()
    End Try

End Sub
4

0 回答 0