MST
星途 面试题库

面试题:Visual Basic异步并发控制问题

假设有多个异步任务需要并发执行,在Visual Basic中如何确保在所有任务完成后执行后续操作?请给出具体代码示例,并且说明如何处理任务执行过程中的异常。
46.7万 热度难度
编程语言Visual Basic

知识考点

AI 面试

面试题答案

一键面试

在Visual Basic中,可以使用Task.WhenAll方法来确保在所有异步任务完成后执行后续操作。以下是具体代码示例:

Imports System.Threading.Tasks

Module Module1
    Sub Main()
        Dim tasks As New List(Of Task)()

        '添加多个异步任务
        tasks.Add(Task.Run(Sub() DoAsyncTask1()))
        tasks.Add(Task.Run(Sub() DoAsyncTask2()))

        Try
            '等待所有任务完成
            Task.WhenAll(tasks).Wait()
            Console.WriteLine("所有任务已完成")
        Catch ex As AggregateException
            '处理任务执行过程中的异常
            For Each innerEx In ex.InnerExceptions
                Console.WriteLine($"任务执行出错: {innerEx.Message}")
            Next
        End Try
    End Sub

    Async Function DoAsyncTask1() As Task
        '模拟异步操作
        Await Task.Delay(2000)
        Console.WriteLine("任务1完成")
    End Function

    Async Function DoAsyncTask2() As Task
        '模拟异步操作
        Await Task.Delay(3000)
        Console.WriteLine("任务2完成")
    End Function
End Module

代码说明

  1. 创建任务列表:使用List(Of Task)来存储多个异步任务。
  2. 添加任务:通过Task.Run方法将异步操作包装成任务,并添加到任务列表中。
  3. 等待所有任务完成:使用Task.WhenAll(tasks).Wait()等待所有任务完成。如果有任何任务抛出异常,Wait方法会捕获并包装成AggregateException
  4. 异常处理:在Try - Catch块中捕获AggregateException,并遍历InnerExceptions属性来处理每个任务抛出的异常。

这样就可以确保在所有异步任务完成后执行后续操作,并处理任务执行过程中的异常。