110,537
社区成员
发帖
与我相关
我的任务
分享
Dim t As Task = New Task(Function() TaskGo(5))
t.Start()
t.wait()
msgbox ("ok")
/////////////
Private Function TaskGo(ByVal tasknum As Integer)
Dim tasks(tasknum) As Task
For i = 0 To tasknum - 1
Dim ti As Integer = i
tasks(i) = Task.Factory.StartNew(Function() TaskGoGo(ti), Cts)
Next
Task.WaitAll(tasks, Cts.Token)
Return Nothing
End Function
Private Function TaskGoGo(ByVal ti As Integer)
...
End Function
Private Function TaskGo(ByVal tasknum As Integer) As String
Dim tasks(tasknum) As Task
Dim L As New List(Of Task)()
For i = 0 To tasknum - 1
Dim ti As Integer = i
tasks(i) = Task.Factory.StartNew(Function() TaskGoGo(ti))
L.Add(tasks(i))
Next
'Task.WaitAll(tasks)
Task.WaitAll(L.ToArray)
Return ""
End Function
Private Function TaskGoGo(ByVal ti As Integer)
Thread.Sleep(1000)
MsgBox("1111")
Return Nothing
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim t As Task
t = New Task(Function() TaskGo(3))
t.Start()
t.Wait()
MsgBox("ok")
End
End Sub
Task.Run(() => { }).ContinueWith(t=>{})
ContinueWith方法,不要用wait,当然也可以简单的用async和await关键字
Private Function TaskGo(ByVal tasknum As Integer)
For I=0 to tasknum-1
TaskGoGo(I)
Next
return nothing
End Function
'调用
TaskGo(5)
msgbox ("ok")
第二个问题
只有符合CLS(公共语言规范)规范的东西,才是各种.NET语言共有的。也就是说,C#有的东西,vb不一定有,想别的办法
Task masterTask = Task.Run(new Action(() =>
{
taskMethod(5);
MessageBox.Show("Return master task!");
}));
masterTask.Wait();
MessageBox.Show("The main thread is completed!");