Tôi bằng cách nào đó cảm thấy tôi thiếu một cái gì đó cơ bản. Đây là vấn đề của tôi.Tạo một tác vụ với một hành động <T>
Tôi đang cố gắng tạo một phiên bản System.Threading.Tasks.Task để thực thi hành động chấp nhận tham số của một loại nhất định. Tôi nghĩ tôi có thể làm điều gì đó như
void DoWork(MyClass obj) {} //My action that accepts a parameter of type 'MyClass'
MyClass obj = new MyClass();
Action<MyClass> action = DoWork; //action that points to the method
Task task = new Task(action,obj); //task that would execute 'DoWork' with 'obj' as the parameter when I call Start.
Rõ ràng điều này không biên dịch. Có vẻ như tôi chỉ có thể sử dụng một số Action<object>
và không phải là Action<T>
cho một tác vụ và sau đó truyền 'đối tượng' vào T bên trong phương thức của tôi.
Làm cách nào để đạt được những gì tôi muốn một cách hiệu quả và hiệu quả nhất?
Bất kỳ lý do tại sao điều này không phải là một phần của API? – alwayslearning
'Nhiệm vụ' nằm trong khuôn khổ kể từ .Net 4.0, vì vậy tôi nghĩ rằng vòng loại là không cần thiết. – svick
Ngoài ra, đó không phải là cách hoạt động của contravariance, bạn có thể truyền 'Action