Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使异步任务接口与monodroid向后兼容_C#_Xamarin.android_Xamarin_Xamarin Studio - Fatal编程技术网

C# 使异步任务接口与monodroid向后兼容

C# 使异步任务接口与monodroid向后兼容,c#,xamarin.android,xamarin,xamarin-studio,C#,Xamarin.android,Xamarin,Xamarin Studio,我在一个核心类库中为存储库提供了一系列接口,它将返回类型定义为任务。这些接口在其他项目中用于定义异步方法 我需要在Xamarain monodroid项目中实现这些相同的接口,我想知道如何在不使用async Wait的情况下使用相同的返回类型,因为monodroid中还不支持async Wait。如果可能的话,我根本不想修改现有的核心库接口。从技术上讲,您不必使用async/wait;这比“手工”简单得多。您的实现只需返回从不为空且已启动的任务(如果适用) 有一些有用的技巧和指南。一种键类型是T

我在一个核心类库中为存储库提供了一系列接口,它将返回类型定义为任务。这些接口在其他项目中用于定义异步方法

我需要在Xamarain monodroid项目中实现这些相同的接口,我想知道如何在不使用async Wait的情况下使用相同的返回类型,因为monodroid中还不支持async Wait。如果可能的话,我根本不想修改现有的核心库接口。

从技术上讲,您不必使用
async
/
wait
;这比“手工”简单得多。您的实现只需返回从不为空且已启动的任务(如果适用)

有一些有用的技巧和指南。一种键类型是
TaskCompletionSource
,您可以使用它包装任何异步实现(例如,APM)。同步实现可以使用
Task.FromResult
(这只是
TaskCompletionSource
的一个小包装。如果您有CPU工作要做,可以使用
Task.Factory.StartNew
,即
Task.Run
。对于更复杂的实现,您需要一个带有
ContinueWith的延续


换句话说,只要返回的
任务始终处于启动状态,所有.NET 4.0 TPL技术都可以使用。(获取未启动的
任务的唯一方法是使用
任务
构造函数构造它,而不是调用
启动
。因此,只要不这样做,就应该没有问题。)

也许可以看看
Microsoft.Bcl
它为WP7提供了异步和等待。还有一个名为
AsyncBridge
的项目,它为PCLs、Xamarin.Android和Xamarin.iOS实现
任务