相关疑难解决方法(0)

在构造函数中调用异步方法?

简介:我想在构造函数中调用异步方法.这可能吗?

详细信息:我有一个调用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

158
推荐指数
6
解决办法
11万
查看次数

await Task <T>和Task <T> .Result有什么区别?

 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将阻止它,我会不会错,它会是正确的吗?

c# multithreading async-await

41
推荐指数
2
解决办法
7624
查看次数