异步等待调用不返回

时间:2017-10-06 04:50:55

标签: c# asynchronous async-await akavache

我有一个问题,我调用异步方法,并且调用不返回。我认为它是一个线程种族。我该怎么写得正确?

这是它开始的地方。我首先调用一个名为“GetCachedValuesAsync”的异步方法

public void OnNavigatingTo(NavigationParameters parameters)
    {
        Task.Run(async () =>
        {
            await GetCachedValuesAsync();
            ClipRefernce = GenerateRefernce(clips);
        });
    }

以下是GetCachedValueAsync的方法签名

public async Task  GetCachedValuesAsync()
    {
        try
        {
            clips = await BlobCache.LocalMachine.GetObject<List<Clip>>("clips");
        }
        catch (KeyNotFoundException ex)
        {
            clips = new List<Clip>();
        }
    }

我没有得到BlobCache返回的调用,BlobCahce方法是一个名为akavache的库的一部分。

代码也没有点击:ClipRefernce = GenerateRefernce(clips);

感谢您的帮助

修改1

这是GenerateRefernce方法。

public string  GenerateRefernce(List<Clip> clips)
    {
        string refernce = "";
        if(clips.Count > 0)
        {
            var clip = clips.LastOrDefault();
            refernce = String.Format("Ref {0:yyyy}/{1}",DateTime.Now , clip.ClipId + 1);
        }
        else{
            refernce = String.Format("Ref {0:yyyy}/{1}", DateTime.Now, 1);
        }
        return refernce;
    }

1 个答案:

答案 0 :(得分:0)

您需要从Task.Run中删除同步方法,如下所示:

public void OnNavigatingTo(NavigationParameters parameters)
{
    Task.Run(async () =>
    {
        await GetCachedValuesAsync();
    });

    ClipRefernce = GenerateRefernce(clips);
}

public async Task  GetCachedValuesAsync()
{
    try
    {
        clips = await BlobCache.LocalMachine.GetObject<List<Clip>>("clips");
    }
    catch (KeyNotFoundException ex)
    {
        clips = new List<Clip>();
    }
}