フォームの読み込みイベントで AttemptLogin を呼び出す vs2010、4.0 vb.net、WinForms アプリがあります。可能であればフォームの読み込みをブロックしないようにしたいのですが、4.0 のタスクと継続が正しい方法になることを望んでいました。メイン タスクをデフォルト スケジューラで実行し、継続を fromcurrentsynchronisationcontext で実行できるからです。 OnAttemptLogin が機能している 継続で OnAttemptLoginCompleted 関数を呼び出すことができません。
OnAttemptLogin が「RunToCompletion」タスクを返すため、継続が呼び出されないためだと思います。しかし、私はそれに対処する方法がわかりません。私は多くのことを試しましたが、今では自分自身を混乱させてしまい、ほとんどキーをマッシュアップしています. 誰でもアドバイスを提供できますか?私は単に間違っているのでしょうか、それとも間違った考えを持っているのでしょうか?
これまでのところ、OnAttemptLogin は期待どおりに機能しますが、LongRunning タスクの継続を呼び出すことはありません。
注意してください:vs2010 .net4.0にいるのでawaitを使用できないため、ContinueWithで立ち往生しています。
Public Sub AttemptLogin(OnAttemptLoginCompleted As Action(Of Task(Of HttpResponseMessage)))
Try
Dim LongRunningTask As Task(Of HttpResponseMessage) = Task.Factory.StartNew(Function()
Return OnAttemptLogin()
End Function, TaskScheduler.Default)
Dim UITask As Task(Of HttpResponseMessage) = LongRunningTask.ContinueWith(Sub(t)
OnAttemptLoginCompleted(t)
End Sub, TaskScheduler.FromCurrentSynchronizationContext)
LongRunningTask.Wait()
Catch ex As AggregateException
' nom nom nom
' do something useful
End Try
End Sub
Private Function OnAttemptLogin() As Task(Of HttpResponseMessage)
Dim aClient = New HttpClient()
Using (aClient)
' CREATE REQUEST
aClient.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json"))
aClient.DefaultRequestHeaders.Add("Authorization", "Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(String.Format("{0}:{1}", CallingDTO.Email, CallingDTO.Password))))
UserQueryDTO.UserName = UserDTO.Email
UserQueryDTO.Password = UserDTO.Password
Dim url As String = DnnRequest.GetUrl(Credentials.HttpAlias, cstModuleAssembly, "User", "CanLogin", False)
' POST REQUEST
Dim p As Task(Of HttpResponseMessage) = aClient.PostAsJsonAsync(url, UserQueryDTO).ContinueWith(Function(x)
' READ RESPONSE
Dim r = x.Result.Content.ReadAsAsync(Of HttpResponseMessage)()
r.Wait()
Return r.Result
End Function)
Try
p.Wait()
Catch ex As Exception
End Try
Return p
End Using
End Function