Xamarin中的异步方法.iOS beta触发JIT
本文关键字:beta 触发 JIT iOS 异步方法 Xamarin | 更新日期: 2023-09-27 18:13:16
我有最新的Xamarin。iOSβ;尝试使用任何异步方法都会触发JIT异常。与方法的内容无关。
我正在运行它的控制器(主要是销毁保存一个令牌异步方法)
using System;
using System.Drawing;
using System.Net.Http;
using MonoTouch.Foundation;
using System.Collections.Generic;
using MonoTouch.UIKit;
using Archer.Base;
namespace Archer.Ios
{
public class CategoryTableViewController : UITableViewController
{
public CategoryTableViewController () : base (UITableViewStyle.Grouped)
{
}
String foo;
public override void DidReceiveMemoryWarning ()
{
// Releases the view if it doesn't have a superview.
base.DidReceiveMemoryWarning ();
// Release any cached data, images, etc that aren't in use.
}
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
//*snip*
}
public override void ViewDidAppear (bool animated)
{
LoadCategories ();
base.ViewDidAppear (animated);
}
public async void LoadCategories ()
{
foo = await (new HttpClient ()).GetStringAsync
("http://ifconfig.me/all.json");
}
}
}
系统。ExecutionEngineException:尝试JIT编译方法"System.Runtime.CompilerServices.AsyncVoidMethodBuilder:开始(Archer.Ios.CategoryTableViewController/c__async0&)'运行时与——aot-only。请参阅http://docs.xamarin.com/ios/about/limitations更多的信息。
at Archer.Ios.CategoryTableViewController.LoadCategories () [0x00000]在Archer.Ios.CategoryTableViewController.ViewDidLoad ()[0 x0009d]阿切尔/用户/apaulin/src//Archer.Ios/CategoryTableViewController.cs: 43At At(包装器管理到本机)MonoTouch.ObjCRuntime。消息传递:void_objc_msgSend (intptr,intptr) atMonoTouch.UIKit.UIWindow.MakeKeyAndVisible () [0x00008] in/开发/MonoTouch/源/MonoTouch/src/UIKit/UIWindow.g.cs: 129Archer.Ios.AppDelegate.FinishedLaunching(MonoTouch.UIKit。UIApplication app, monotouch。foundation。nsdictionary选项)[0x00054] in/Users/apulin/src/Archer/Archer. ios/AppDelegate.cs:39 at at需要有)MonoTouch.UIKit.UIApplication: UIApplicationMain(int,string[],intptr,intptr)在MonoTouch.UIKit.UIApplication.Main(系统。字符串[]参数,系统。字符串principalClassName, System。字符串delegateClassName) [0x0004c] in/开发/MonoTouch/源/MonoTouch/src/UIKit/UIApplication.cs: 38Archer.Ios.Application.Main(系统。字符串[]args) [0x00001] in阿切尔/用户/apaulin/src//Archer.Ios/c: 17
解决:在代码的其他地方有一个麻烦的泛型方法导致JIT问题
尝试几种代码组合,看看是否能找到具体的问题。
下面是一个可以尝试的例子:
public async Task<string> LoadCategories ()
{
var client = new HttpClient ();
return await client.GetStringAsync("http://ifconfig.me/all.json");
}
如果你的一个组合工作,我会发布一个bug到Xamarin的Bugzilla与破碎的例子,然后发布你的解决方案。这将帮助Xamarin修复它