我的Xamarin.Forms應用程序有幾個接口(用於Dependency
),其中包含Android和iOS的實現。它們中的方法不是異步的。現在我想爲UWP添加這些接口的實現,但是一些需要的方法是異步的,所以它們不適合簽名。我如何處理這個問題?是唯一爲UWP創建單獨界面的解決方案嗎?當Android和iOS不是異步時,如何處理UWP異步?
回答
在這些場景中我傾向於使用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);
}
}
這是個好主意。而不是嘗試同步異步,讓我們異步同步。如果你不能擊敗他們,加入他們。 :) – ispiro
每當我看到有人打電話。結果在一個任務,我的一小塊死亡。 –
您不能使用await關鍵字。您必須創建一個新的任務並等待任務完成。一個單獨的界面是不必要的。使用任務進行異常處理可能會非常棘手,請告訴您自己。
調用異步方法方法1與返回值:
string s = Task.Run(() => Method1()).Result;
無返回值:
Task.Run(() => Method1()).Wait;
.Rest或.Wait塊,直到任務完成。
你剛剛打開了一袋死鎖。 – Bart
- 1. 如何處理異步函數中的異常UWP App GetFileFromPathAsync(path);
- 2. 當HTTP不是時,Spray如何異步?
- 3. 異步TaskManager處理作業/步異常
- 4. GLES iOS,Android RenderBuffer同步還是異步?
- 5. System.Threading.Timer處理異步超時?
- 6. 異步和並行處理
- 7. 事務和異步處理
- 8. EJB和異步處理
- 9. 異步任務和處理程序Android
- 10. 什麼是「異步異常處理」
- 11. Node.js處理異步
- 12. Java異步處理
- 13. 異步處理ODP.NET
- 14. 節點異步和異常處理
- 15. 何時處理TcpClients時使用異步?
- 16. nodejs-redis(&connect-redis)如何處理同步和異步?
- 17. 地理位置異步iOS
- 18. 同步處理異步輸入
- 19. Android的處理器運行的異步
- 20. 處理UI的Android異步任務
- 21. facebook android sdk認證是異步的。如何處理它?
- 22. 異步處理消息框
- 23. 的AsyncTask(異步處理)
- 24. Tornado異步處理程序
- 25. 處理NodeJS異步行爲
- 26. java中的異步處理
- 27. Rails異步處理模型
- 28. Tomcat 7異步處理
- 29. 處理在異步Workitemhandler
- 30. RxJS流的異步處理
值,你可以張貼代碼爲您的接口?沒有代碼時很難提供建議。 –
像'string Method1();'這將需要在UWP:'任務 Method1();'。 –
ispiro
你可以爲所有3個平臺做異步接口嗎? –