Ich bin derzeit mit dem .NET Prism-Framework beginnen, eine WPF-Anwendung zu entwickeln. Eine Sache, die ich nicht in der Lage bin zu bestimmen, ist der beste Weg, um asynchrone Aufrufe an einen WCF-Dienst oder eine Datenbank zu erreichen? Der Grund dafür ist, dass ich nicht möchte, dass ein WCF/DB-Aufruf den UI-Thread blockiert, was dazu führt, dass die UI einfach einfriert, bis der Vorgang abgeschlossen ist.
Meinem Verständnis nach sollte ich der Architektur folgen:
View (WPF) <=> View Model <=> Application Services <=> DB/WCF
Implementiere ich das asynchrone Verhalten im Ansichtsmodell mit etwas wie dem AsyncDelegateCommand ? Wenn ich dies tue, dann bin ich nicht in der Lage, jeden Zustand in den Anwendungsdiensten zu erhalten, da das Setzen eines Zustands im UI-Thread durchgeführt werden muss (es sei denn, es gibt eine Möglichkeit, dies zu umgehen).
Die andere Möglichkeit besteht darin, asynchrone Methoden mit Callbacks in den Anwendungsdiensten bereitzustellen und die Anwendungsdienste Threads/Tasks für die asynchronen Vorgänge erzeugen zu lassen.
Ich habe kurz in die Referenzimplementierung von Prism StockTrader geschaut, und sie scheinen nichts asynchron zu tun. Ich habe das Gefühl, dass dies ein sehr häufiges Problem sein sollte, und es muss einige Best Practices da draußen sein, um damit umzugehen.