繁体   English   中英

异步等待调用不会返回

[英]Async await call does not return

我有一个问题,我调用了一个异步方法,并且该调用未返回。 我认为它是线程的竞赛。 我该如何正确写呢?

从这里开始。 我首先调用一个称为“ 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;
    }

您需要从Task.Run删除sync方法。 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>();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM