Searching local drive for multiple files
This seems to be faster by 5 seconds on 12:

Public Function DriveSearch(directory As String, pattern As String) As String()
    Dim filesFound As List(Of String) = Nothing

    Try
        filesFound = GetFilesRecurively(directory, pattern)
    Catch ex As Exception
        Console.WriteLine(ex.Message)
    End Try

    Return filesFound?.ToArray
End Function

Private Function GetFilesRecurively(directory As String, pattern As String) As List(Of String)
    Dim filesFound = IO.Directory.EnumerateDirectories(directory) _
                                 .AsParallel() _
                                 .SelectMany(Function(subDirectory) GetFilesRecurively(subDirectory, pattern)) _
                                 .ToList()

    filesFound.AddRange(IO.Directory.EnumerateFiles(directory, pattern))

    Return filesFound
End Function


This version beats them all taking only few milliseconds:

Public Function DriveSearch(directory As String, pattern As String) As String()
    Dim filesFound As List(Of String) = Nothing

    Try
        filesFound = IO.Directory.EnumerateFiles(directory, pattern, SearchOption.AllDirectories).ToList()
    Catch ex As Exception
        Console.WriteLine(ex.Message)
    End Try

    Return filesFound?.ToArray
End Function


You can also validate the arguments and save yourself a Try..Catch:

Public Function DriveSearch(path As String, pattern As String) As IEnumerable(Of String)
    Return If _
        (
            ArgumentsValid(path, pattern),
            Directory.EnumerateFiles(path, pattern, SearchOption.AllDirectories),
            Enumerable.Empty(Of String)
        )
End Function

Private Function ArgumentsValid(path As String, pattern As String) As Boolean
    If Not Directory.Exists(path) Then
        Console.WriteLine("Invalid path")
        Return False
    End If

    If pattern Is Nothing Then
        Console.WriteLine("Invalid pattern")
        Return False
    End If

    Return True
End Function