Chúng tôi có một hoạt động dịch vụ web WCF được sử dụng để tạo tệp PDF. Chúng tôi đang sử dụng công cụ của bên thứ 3 để thực hiện điều đó (đặc biệt là Syncfusion) mà chúng tôi không thể thay thế vào lúc này.WCF webservice - đang sử dụng khóa sẽ gây ra sự cố?
Vấn đề là có vẻ như công cụ của bên thứ 3 có vấn đề với đa luồng và không hoạt động trong một số trường hợp khi có nhiều cuộc gọi đến dịch vụ web cùng một lúc.
Chúng ta có thể thoát khỏi vấn đề bằng cách sử dụng lock
và đảm bảo rằng chỉ có một thread thực thi phần quan trọng:
Public Class GeneratorController
{
// object we use for lock
private static Object thisLock = new Object();
public void Generate(ref PdfDocument pdfDocument)
{
lock (thisLock)
{
// critical section
}
}
}
Câu hỏi của tôi là: là một ý tưởng tốt? Nó sẽ gây ra bất kỳ vấn đề nào nếu chúng ta có một mã như vậy trong một dịch vụ web?
Note
Đây không phải là một câu hỏi về Syncfusion. Đây là câu hỏi về việc sử dụng lock
trong dịch vụ web. Không thay đổi thẻ để đồng bộ hóa, vui lòng.
Tôi không quen với Syncfusion - có thể tạo nhiều bản sao đồng thời của đối tượng không? Tôi sẽ nghĩ nếu bạn có những trường hợp riêng biệt, bạn sẽ không cần phải khóa. – Tim
Tôi mặc dù vậy quá nhưng nó có vẻ là vấn đề. Có thể họ đang sử dụng thứ gì đó tĩnh trong mã của họ ... – Szymon