In MonoTouch.UIKit.UIPrinterPickerController, the method:
public virtual System.Threading.Tasks.Task<MonoTouch.UIKit.UIPrinterPickerCompletionResult>; PresentAsync (bool animated, out bool result);
contains an `out bool` parameter that captures (I think) whether or not the user selected a printer. The UIPrinterPickerCompletionResult that is passed to the Task<T> contains a field that does exactly this. There are other versions of PresentAsync that make more sense to asyncify.
This is not an isolated issue, as there are other places (in UIKit, alone) where this occurs.
Maybe only asyncify the PresentAsync overload that does not contain an `out bool` parameter that is captured in the return value. (Though that sounded like snark, I meant only to convey that, while I can't see a reason for these bindings, there may be one of which I am not aware.)
There might be other cases but both `out` and `ref` are good signs of API that are not really usable with async.
What we need to do, in no particular order
1. btouch should emit a warning if `[Async]` is used on such API; it cannot be an error since it would break binary compatibility for anyone who made that mistake. It's possible to use `-warnaserror` to avoid future mistakes;
2. Our introspection tests should spot those conditions and report errors on the bots;
3. Obsolete our existing API that expose `out` or `ref` parameters and exclude them from XAMCORE_4_0;
@Alex please start with #1. I'll try to handle #2 and #3 independently.