gpt4 book ai didi

c# - Xamarin.iOS异步等待方法不起作用

转载 作者:行者123 更新时间:2023-12-01 20:06:34 25 4
gpt4 key购买 nike

我正在Xamarin中以C#开发iOS应用,我有一个方法,必须在异步模式下调用。我得到了this指南,但似乎与我的需求有所不同。

我试图这样做:

var tasks = new List<Task<UIImage>>();
var imageUrls = new[] {
"http://www.mySite/images/02.jpg",
"http://www.mySite/images/03.jpg",
"http://www.mySite/images/04.jpg",
"http://www.mySite/images/05.jpg",
"http://www.mySite/images/06.jpg",
"http://www.mySite/images/07.jpg",
"http://www.mySite/images/08.jpg",
"http://www.mySite/images/09.jpg",
"http://www.mySite/images/10.jpg",
"http://www.mySite/images/11.jpg",
"http://www.mySite/images/12.jpg",
"http://www.mySite/images/3.jpg",
"http://www.mySite/images/14.jpg",
"http://www.mySite/images/15.jpg"

};
foreach (var imageUrl in imageUrls)
{
var task = getImageFromUrl(imageUrl);
tasks.Add(task);
}
var images = await Task.WhenAll(tasks);

调用的方法是:
async Task<UIImage> getImageFromUrl(string uri)
{
using (var url = new NSUrl(uri))
using (var data = NSData.FromUrl(url))
return UIImage.LoadFromData(data);
}

它同步运行,并显示以下警告:
Warning CS1998: Async block lacks `await' operator and will run synchronously (CS1998)

我的代码中缺少什么?
似乎getImageFromUrl()方法缺少一个异步属性。还有其他方法可以从网址异步加载图片吗?

最佳答案

您在示例中显示的代码不是异步的。如果要加载所有6张图像,则可能需要具有以下内容:

var tasks = new List<Task<UIImage>>();
var imageUrls = new[] {"http://www.mySite/images/02.jpg", ... "http://www.mySite/images/09.jpg"};
foreach (var imageUrl in imageUrls) {
var task = // invoke a method which loads an image asynchronously and returns a Task, but don't call await on this Task
tasks.Add(task);
}
var images = await Task.WhenAll(tasks);

同样,您在 getImageFromUrl中拥有的代码不会调用任何异步方法。您可以考虑使用 HttpClient.GetByteArrayAsync异步加载数据,然后从此字节数组创建一个Image:
async Task<UIImage> getImageFromUrl(string uri)
{
using (var httpClient = new HttpClient())
var imageBytes = await httpClient.GetByteArrayAsync(uri);
var image = // create image from imageBytes;
return image;
}

关于c# - Xamarin.iOS异步等待方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38792404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com