【发布时间】:2013-10-23 11:37:16
【问题描述】:
我是 async 和 await 编程风格的新手。我该如何解决以下问题:
我先调用下面的代码。这里的问题是第一行正在等待它需要填充categoriesvm.Categorieslist,它不需要,但第二行被调用。 (我认为这是 await 的默认行为)
如何确保只有在第一行中填充了categoriesvm.Categorieslist 时才调用第二行?
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
categoriesvm.GetCategories();
BookCategories.DataContext = from vm in categoriesvm.Categorieslist select vm;
}
在上面的代码中,当我执行第一行时,它会低于Categorieslist 是我在上面访问的列表。
public async void GetCategories()
{
Categorieslist = new ObservableCollection<Categories>(await PhoneClient.GetDefaultCategories());
}
phoneclient 在下方
public class PhoneClient
{
private static readonly HttpClient client;
public static Uri ServerBaseUri
{
get { return new Uri("http://169.254.80.80:30134/api/"); }
}
static PhoneClient()
{
client =new HttpClient();
client.MaxResponseContentBufferSize = 256000;
client.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
}
public async static Task<List<Categories>> GetDefaultCategories()
{
HttpResponseMessage getresponse = await client.GetAsync(ServerBaseUri + "Categoryss");
string json = await getresponse.Content.ReadAsStringAsync();
json = json.Replace("<br>", Environment.NewLine);
var categories = JsonConvert.DeserializeObject<List<Categories>>(json);
return categories.ToList();
}
}
【问题讨论】:
标签: c# windows-phone-8 async-await c#-5.0 dotnet-httpclient