Aus Neugier, ich versuche, einige einfache async
/await
-Code zu erhalten unter Profil .NET 3.5 Client zu kompilieren:Was ist der Mindestsatz von Typen, die zum Kompilieren von Async-Code erforderlich sind?
async void AwaitFoo()
{
await new Foo();
}
class Foo
{
public IFooAwaiter GetAwaiter() { … }
}
interface IFooAwaiter : System.Runtime.CompilerServices.INotifyCompletion
{
bool IsCompleted { get; }
void GetResult();
}
Ich weiß wohl, dass ich .NET 3.5 nicht diese Sprache-Funktion nicht unterstützt, wie sie durch diese Kompilierungsfehler ausgedrückt:
Cannot find all types required by the
async
modifier. Are you targeting the wrong framework version, or missing a reference to an assembly?
ich bin mir auch bewusst der NuGet package Microsoft.Bcl.Async
, die keine Unterstützung für .NET 3.5 hat.
Frage: Was ist der Mindestsatz von Typen & Typ Mitglieder für async
Code erforderlich zu kompilieren? Ist dieser minimale Satz offiziell dokumentiert? und wenn ja, wo? (Beachten Sie, dass ich bei der erfolgreichen Compilation nur daran interessiert bin, nicht die Ausführung.)
Was ich bisher habe:
Ich habe versucht, diese minimale Menge von Arten zu finden, indem Experiment, das seit den Compiler Berichten erforderlich, aber fehlenden Typen einzeln möglich zu sein scheint:
Predefined type
System.Runtime.CompilerServices.IAsyncStateMachine
is not defined or imported.
definieren berichtete Typen gemäß MSDN Referenzseite führen dann zu dem nächsten fehlenden Typ wird berichtet. Ich habe bisher:
System.Runtime.CompilerServices.IAsyncStateMachine
System.Runtime.CompilerServices.INotifyCompletion
(erforderlich durch den Beispielcode oben)System.Threading.Tasks.CancellationToken
(wird vonTask
)System.Threading.Tasks.TaskCreationOptions
(erforderlich durchTask
)System.Threading.Tasks.Task
An diesem Punkt s getoppt, da Task
viele Mitglieder hat, aber der Compiler nicht genau angibt, welche Mitglieder es benötigt; es meldet nur den Typ als Ganzes. Ich könnte daher viel mehr von der Typdefinition reproduzieren als das, was tatsächlich benötigt wird.
Dank. Haben Sie selbst von den Typen in Ihrer Liste erfahren, oder haben Sie die Liste aus der offiziellen Dokumentation genommen? - Danke auch für den Eduasync-Link, ich habe schon angefangen, diese Blogartikel zu lesen. – stakx
@stakx: Nun, ich habe die Liste anfangs aufgebaut, als ich mit Eduasync gearbeitet habe - aber jetzt schaue ich auf die Typen zurück, von denen ich weiß, dass sie vom Compiler im generierten Code verwendet werden. –