当Android和iOS不是异步时,如何处理UWP异步?

时间:2017-06-18 11:14:09

标签: c# xamarin uwp xamarin.forms xamarin.uwp

我的Xamarin.Forms应用程序有几个接口(用于Dependency s),具有Android和iOS的实现。它们中的方法不是异步的。现在我想为UWP添加这些接口的实现,但是一些所需的方法是异步的,因此它们不适合签名。我该如何处理?是为UWP创建单独接口的唯一解决方案吗?

2 个答案:

答案 0 :(得分:1)

在这些场景中,我倾向于使用Task.FromResult方法进行非异步实现。示例:您在Windows上有一个返回类型为bool的Task的方法,并且您希望在Android和iOS上为返回bool的方法实现相同的功能。

public interface ISample
{
    public Task<bool> GetABool();
}

在Windows上,您只需返回任务

public class WindowsSample : ISample
{
    public Task<bool> GetABool()
    {
        // whatever implementation
        return SomeTaskOfTypeBool(); 
    }
}

在Android或iOS上,您可以将值包装在任务

public class AndroidSample : ISample
{
    public Task<bool> GetABool()
    {
        // replace with however you get the value.
        var ret = true;
        return Task.FromResult(ret);
    }
}

答案 1 :(得分:0)

您不能使用await关键字。您必须创建一个新任务并等待任务完成。不需要单独的界面。使用任务进行异常处理可能很棘手,请告知自己。

使用返回值调用异步方法Method1:

string s = Task.Run(() => Method1()).Result;

没有返回值:

Task.Run(() => Method1()).Wait;

.Rest或.Wait阻止,直到任务完成。

更多详情: Calling async methods from non-async code