internal void EmitPoll(AsyncBlockContext context) { context.IL.MarkLabel(pollLabel); context.IL.Emit(OpCodes.Ldarg_0); context.IL.Emit(OpCodes.Ldfld, futureField); context.IL.EmitCall(OpCodes.Callvirt, futureField.FieldType.GetMethod("PollValue"), 1); futureResultVar.EmitStore(context); futureResultVar.EmitLoad(context); context.IL.Emit(OpCodes.Ldfld, futureResultVar.LocalType.GetField("ready")); context.IL.Emit(OpCodes.Brfalse, context.notReady); context.IL.Emit(OpCodes.Br, context.resume); }
internal void EmitRestore(AsyncBlockContext context) { context.IL.Emit(OpCodes.Ldarg_0); context.IL.Emit(OpCodes.Ldfld, storageField); localRef.EmitStore(context); }