Tôi tin rằng tôi hiểu được TransactionScopeOption.Suppress
và TransactionScopeOption.Required
nhưng gặp khó khăn khi hiểu những gì TransactionScopeOption.RequiresNew
thực hiện. Dựa trên lời giải thích cuối cùng mà tôi đã đọc, liệu hai khối mã sau đây có giống nhau không? Đây có phải là biểu diễn chính xác về những gì RequiresNew
nghĩa là gì?Tìm hiểu về TransactionScopeOptions: RequiresNew = Suppress + Required?
using (var ts1 = new TransactionScope(TransactionScopeOption.RequiresNew))
{
DoStuff();
ts1.Complete();
}
và
using (var ts2 = new TransactionScope(TransactionScopeOptions.Suppress))
{
using (var ts3 = new TransactionScope())
{
DoStuff();
ts3.Complete();
}
ts2.Complete(); // not required but recommended for consistency's sake
}
Đã đã làm, đó là những gì đã cho tôi ấn tượng này. Trích dẫn: "' RequiresNew': mã chứa phụ thuộc vào giao dịch, nhưng phải được cam kết độc lập hoặc được cuộn lại. 'Suppress': mã chứa thực hiện bù trừ của chính nó, do đó không phải là một phần của giao dịch." Điều này có nghĩa là (đối với tôi) "cam kết" hoặc "quay lại" một RequireNew TransactionScope không thể được điều khiển hoặc phụ thuộc vào giao dịch bên ngoài - không ảnh hưởng đến giao dịch khác. Đó là những gì mà Suppress nên thực hiện bên trong TransactionScope. – Jaxidian
Trong tất cả sự trung thực, tôi đã hiểu sai khối mã thứ hai của bạn và nghĩ rằng bạn có 2 cặp giao dịch lồng nhau() (Tôi đã bỏ qua Suppress ở bên ngoài). Tôi sẽ chỉnh sửa – Eddy
Và chỉ để làm rõ ... Nếu tôi rollback giao dịch RequireNew, mà không có cách nào ảnh hưởng đến một TransactionScope cha mẹ, và tương tự như vậy, nếu tôi rollback một TransactionScope cha mẹ, mà không có cách nào ảnh hưởng đến giao dịch RequiresNew? Xin lỗi, chỉ muốn đảm bảo rằng tôi hiểu đầy đủ các tùy chọn này. Rất nhiều tác dụng phụ có khả năng gây khó chịu (bế tắc, hoạt động phi nguyên tử, vv) nếu tôi nhận được những hỗn hợp này! – Jaxidian