簡體   English   中英

從 VB 主方法調用 C# 庫中的異步方法

[英]Calling an Async method in a C# library from a VB main method

我的應用程序是用 VB.net 編寫的,由於我無法控制的原因,我無法更改技術。 我正在嘗試使用 AWS S3 存儲桶來存儲文件。 我在 VB 中的應用程序需要顯示一個 window,它列出了存儲桶中的文件並允許用戶下載它們。

S3 中的文件列表是通過使用 C# 的Async Task完成的

 public async Task<List<string>> listAllContentsAsync()
        {
            List<string> contents = new List<string>();
            client = new AmazonS3Client(bucketRegion);
            ListObjectsV2Request request = new ListObjectsV2Request
            {
                BucketName = bucketName,
                MaxKeys = 20
            };

            ListObjectsV2Response response;
            do
            {
                response = await client.ListObjectsV2Async(request);

                foreach (S3Object entry in response.S3Objects)
                {
                    String contentName = entry.Key.Split('.')[0];
                    contents.Add(contentName);
                }

                request.ContinuationToken = response.NextContinuationToken;
            } while (response.IsTruncated);

            return contents;
        }

然后我為 C# 中的項目創建一個 dll 並在 VB 項目中引用它。 僅針對 POC,我創建了一個示例 VB 項目,該項目將實例化 object 並調用listAllContentsAsync方法來列出內容。

我不得不更改Main方法的簽名,因為我調用的 function 是Async 這是 VB 中更新后的Main方法:

Async Function Main() As Task(Of Task)
    Dim objcsClass = New CallMeFromVB.ClassInCSharpProject()
    Dim inputChar As ConsoleKeyInfo = Console.ReadKey()
    Dim contents As New List(Of String)

    contents = Await objcsClass.listAllContentsAsync()
    For Each content As String In contents
        Console.Write(content & " ")
    Next

End Function

現在,當我嘗試運行我的 VB 項目時,我收到一條錯誤消息,指出項目中沒有Main方法。 有沒有辦法可以從 VB Main方法調用Async方法( listAllContentsAsync )?

只需將其同步:

Sub Main() 
    Dim objcsClass = New CallMeFromVB.ClassInCSharpProject()
    Dim inputChar As ConsoleKeyInfo = Console.ReadKey()
    Dim contents As New List(Of String)
    contents = objcsClass.listAllContentsAsync().GetAwaiter().GetResult()
    For Each content As String In contents
        Console.Write(content & " ")
    Next

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM