Android和iOS不异步时如何处理UWP异步?
How to deal with UWP async when Android and iOS are not async?
我的 Xamarin.Forms 应用程序有几个接口(用于 Dependency
s),实现了 Android 和 iOS。它们中的方法不是异步的。现在我想为 UWP 添加这些接口的实现,但是一些所需的方法是异步的,因此它们不符合签名。我该如何处理?为 UWP 创建单独的界面是唯一的解决方案吗?
您不能使用 await 关键字。您必须创建一个新任务并等待任务完成。不需要单独的接口。告诉自己,使用任务处理异常可能很棘手。
调用具有 return 值的异步方法 Method1:
string s = Task.Run(() => Method1()).Result;
没有 return 值:
Task.Run(() => Method1()).Wait;
.Rest 或 .Wait 块,直到任务完成。
更多详情:
在这些场景中,我倾向于将 Task.FromResult 方法用于非异步实现。示例:您在 Windows 上有一个方法 return 是一个 bool 类型的任务,并且您想在 Android 和 iOS 上为 [=26= 的方法实现相同的功能]布尔。
public interface ISample
{
public Task<bool> GetABool();
}
在 Windows 你只需 return 任务
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);
}
}
我的 Xamarin.Forms 应用程序有几个接口(用于 Dependency
s),实现了 Android 和 iOS。它们中的方法不是异步的。现在我想为 UWP 添加这些接口的实现,但是一些所需的方法是异步的,因此它们不符合签名。我该如何处理?为 UWP 创建单独的界面是唯一的解决方案吗?
您不能使用 await 关键字。您必须创建一个新任务并等待任务完成。不需要单独的接口。告诉自己,使用任务处理异常可能很棘手。
调用具有 return 值的异步方法 Method1:
string s = Task.Run(() => Method1()).Result;
没有 return 值:
Task.Run(() => Method1()).Wait;
.Rest 或 .Wait 块,直到任务完成。
更多详情:
在这些场景中,我倾向于将 Task.FromResult 方法用于非异步实现。示例:您在 Windows 上有一个方法 return 是一个 bool 类型的任务,并且您想在 Android 和 iOS 上为 [=26= 的方法实现相同的功能]布尔。
public interface ISample
{
public Task<bool> GetABool();
}
在 Windows 你只需 return 任务
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);
}
}