2

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

这是它开始的地方。我首先调用一个名为“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

这是 GenerateReference 方法。

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;
    }
4

1 回答 1

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>();
    }
}
于 2017-10-06T07:55:42.010 回答