Comme beaucoup le sait, TransactionScope
ont été oubliés lors de l' async
await
modèle a été introduit en .Net. Ils ont rompu si nous avons essayé d'utiliser certains await
appel à l'intérieur d'une étendue de transaction.
Maintenant ce problème est résolu grâce à une portée constructeur option.
Mais il me semble il y a toujours une pièce manquante, au moins, je suis incapable de trouver comment le faire en un simple "étendue de la transaction comme" manière: comment faire pour attendre la validation ou annulation d'une portée?
Commit et rollback sont des opérations d'e / s trop, ils devraient être awaitable. Mais depuis qu'ils se produisent sur la portée de la disposition, on devra attendre le jeter. Qui n'a pas l'air faisable (ni pratique avec l' using
des motifs).
J'ai eu un coup d'oeil à l' System.Transactions.Transaction
interface aussi: pas de awaitable méthodes il soit.
Je comprends que le fait de commettre et le retour arrière est presque uniquement de l'envoi d'un drapeau à la base de données, donc ça devrait être rapide. Mais avec des transactions distribuées, qui pourrait être moins rapide. Et de toute façon, c'est toujours un certain blocage IO.
Distribué cas, rappelez-vous ce qui pourrait déclencher une deux phases commit. Dans certains cas, d'autres durable des ressources sont enrôlés au cours de la première phase (préparer). Ensuite, il signifie généralement que quelques autres requêtes sont émises à l'encontre de ceux qui, dernièrement, s'est enrôlé ressources. Tout ce qui se passe lors de la validation.
Donc, est-il possible d'attendre une étendue de transaction? Ou un System.Transactions.Transaction
à la place?
Note: je ne considère pas cela comme un doublon de "Est-il possible de commit/rollback SqlTransaction asynchrone?". SqlTransaction
sont plus limités que les transactions du système. Ils peuvent s'adresser uniquement SQL-Server et ne sont jamais distribués. Certaines autres transactions n'ont de méthodes asynchrones, comme Npgsql. Maintenant, pour avoir des méthodes asynchrones sur des transactions étendues/système de transactions, DbTransaction
peut être nécessaire de disposer de méthodes asynchrones. (Je ne connais pas le fonctionnement interne du système de transaction, mais il est peut-être à l'aide de cette ADO.NET contrat. La façon dont nous inscrire dans le système de transaction ne me laisse penser qu'il ne l'utilise pas bien.)