【发布时间】:2016-05-12 20:51:59
【问题描述】:
你好,我不知道为什么这个异步操作不等待
private async void scroller_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
if (isLoadingMore)
return;
if (scroller.VerticalOffset > scrollContent.ActualHeight - (Frame.ActualHeight + 300))
await LoadMoreItems();
}
bool isLoadingMore = false;
private async Task LoadMoreItems()
{
isLoadingMore = true;
try
{
List<Items> itemsList = await App.ServiceClient.GetItems("bananas");//<-------Doesn't wait
foreach (Items in itemsList)
listView.Items.Add(c);
}
catch { }
isLoadingMore = false;
}
这是与另一个异步任务的后端调用
public async Task<List<Items>> GetItems(string selector)
{
HttpClient client = new HttpClient();
var request = new HttpRequestMessage()
{
RequestUri = new Uri(myUrl),
Method = HttpMethod.Get,
};
request.Headers.Add("Accept", "application/json");
List<Items> items = null;
var task = await client.SendAsync(request).ContinueWith(
async (s) =>
{
try
{
string Result = await s.Result.Content.ReadAsStringAsync();
if (s.Result.IsSuccessStatusCode)
items= JsonConvert.DeserializeObject<List<Items>>(Result);
}
catch
{ }
});
return items;
}
问题在于嵌套等待或在 scoll 视图中。 我找到了this,但我认为情况并非如此。
【问题讨论】:
-
请提供minimal reproducible example(特别是“最小”部分)。到目前为止,
async void看起来很可疑 - 很可能您对预期行为的期望与一劳永逸不同。
标签: c# asynchronous windows-phone-8 nested frontend