Là một phần của quá trình tự động hóa lớn, chúng tôi đang gọi API của bên thứ ba thực hiện một số dịch vụ gọi điện làm việc trên máy khác. Gần đây, chúng tôi đã phát hiện ra rằng mọi khi máy khác không khả dụng, cuộc gọi API sẽ quay đi đôi khi lên đến 40 phút trong khi cố gắng kết nối với máy chủ từ xa.Sử dụng hợp lý luồng trong C#?
API mà chúng tôi đang sử dụng không cung cấp cách xác định thời gian chờ và chúng tôi không muốn chương trình của chúng tôi chờ đợi lâu như vậy, vì vậy tôi nghĩ rằng chủ đề sẽ là một cách hay để thực thi thời gian chờ. Mã kết quả trông giống như sau:
Thread _thread = new Thread(_caller.CallServices());
_thread.Start();
_thread.Join(timeout);
if (_thread.IsAlive)
{
_thread.Abort();
throw new Exception("Timed-out attempting to connect.");
}
Về cơ bản, tôi muốn cho APICall() chạy, nhưng nếu nó vẫn đang diễn ra sau thời gian chờ đã trôi qua, giả sử nó sẽ thất bại, giết nó và di chuyển trên.
Kể từ khi tôi mới đến luồng trong C# và trên runtime .net tôi nghĩ rằng tôi muốn hỏi hai câu hỏi liên quan:
Có/cơ chế thích hợp hơn tốt hơn trong các thư viện .net cho những gì tôi m cố gắng để làm, và có tôi cam kết bất kỳ gotchas luồng trong đó bit mã?
Bạn xử lý thời gian chờ như thế nào? Bạn chỉ cần để cho các thành phần tiếp tục cố gắng, cho đến 40 phút, để kết nối với máy chủ bị thiếu? Tôi nghĩ rằng câu hỏi là về cách làm cho thành phần ngừng cố gắng kết nối. – Cybis
Xin lỗi, đã chỉnh sửa để thêm mã mẫu ... câu hỏi thời gian chờ được xử lý bởi DateTime.Now