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

Xamarin中的异步方法.iOS beta触发JIT

解决:在代码的其他地方有一个麻烦的泛型方法导致JIT问题

尝试几种代码组合,看看是否能找到具体的问题。

下面是一个可以尝试的例子:

        public async Task<string> LoadCategories ()
        {
            var client = new HttpClient ();
            return await client.GetStringAsync("http://ifconfig.me/all.json");
        }

如果你的一个组合工作,我会发布一个bug到Xamarin的Bugzilla与破碎的例子,然后发布你的解决方案。这将帮助Xamarin修复它