2017-06-18 56 views
2

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

+0

值,你可以张贴代码为您的接口?没有代码时很难提供建议。 –

+0

像'string Method1();'这将需要在UWP:'任务 Method1();'。 – ispiro

+0

你可以为所有3个平台做异步接口吗? –

回答

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

这是个好主意。而不是尝试同步异步,让我们异步同步。如果你不能击败他们,加入他们。 :) – ispiro

+0

每当我看到有人打电话。结果在一个任务,我的一小块死亡。 –

0

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

调用异步方法方法1与返回值:

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

无返回值:

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

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

更多详细信息: Calling async methods from non-async code

+1

你刚刚打开了一袋死锁。 – Bart