简介:我想在构造函数中调用异步方法.这可能吗?
详细信息:我有一个调用getwritings()JSON数据的方法.如果我只是调用getwritings()一个async方法并将其放在await左侧,那么一切正常.但是,当我LongListView在我的页面中创建一个并尝试填充它时,我发现这getWritings()是令人惊讶的返回null而且LongListView是空的.
为了解决这个问题,我尝试更改getWritings()to 的返回类型,Task<List<Writing>>然后在构造函数中检索结果getWritings().Result.但是,这样做最终会阻止UI线程.
public partial class Page2 : PhoneApplicationPage
{
List<Writing> writings;
public Page2()
{
InitializeComponent();
getWritings();
}
private async void getWritings()
{
string jsonData = await JsonDataManager.GetJsonAsync("1");
JObject obj = JObject.Parse(jsonData);
JArray array = (JArray)obj["posts"];
for (int i = 0; i < array.Count; i++)
{
Writing writing = new Writing();
writing.content = JsonDataManager.JsonParse(array, …Run Code Online (Sandbox Code Playgroud) c# constructor async-await windows-phone-8 visual-studio-2013
public async Task<string> GetName(int id)
{
Task<string> nameTask =
Task.Factory.StartNew(() => { return string.Format("Name matching id {0} = Developer", id); });
return nameTask.Result;
}
Run Code Online (Sandbox Code Playgroud)
在上面的方法return语句我使用Task.Result属性.
public async Task<string> GetName(int id)
{
Task<string> nameTask =
Task.Factory.StartNew(() => { return string.Format("Name matching id {0} = Developer", id); });
return await nameTask;
}
Run Code Online (Sandbox Code Playgroud)
我在这里使用等待任务.如果我认为await将释放调用线程但是Task.Result将阻止它,我会不会错,它会是正确的吗?