2

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

4

2 回答 2

1

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

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

在 Windows 上,您只需返回 Task

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

在 Android 或 iOS 上,您可以将值包装在 Task 中

public class AndroidSample : ISample
{
    public Task<bool> GetABool()
    {
        // replace with however you get the value.
        var ret = true;
        return Task.FromResult(ret);
    }
}
于 2017-06-19T15:22:37.453 回答
0

您不能使用 await 关键字。您必须创建一个新任务并等待任务完成。不需要单独的接口。使用 Tasks 处理异常可能很棘手,请自行了解。

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

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

没有返回值:

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

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

更多细节: 从非异步代码调用异步方法

于 2017-06-18T19:39:39.167 回答