[英]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.