Làm cách nào để chạy Tác vụ trả về giá trị và nhận tham số? Tôi thấy rằng có một phương pháp quá tải Task.Run<TResult>(Func<TResult>)
nhưng làm thế nào tôi có thể vượt qua một tham số ở đó?Task.Run và Func <>
11
A
Trả lời
27
Func<TResult>
không tham số. Thông thường, bạn sẽ cần chụp tham số bằng cách sử dụng biểu thức lambda thay thế. Ví dụ:
public void DoSomething(string text)
{
Task<int> task = Task.Run(() => text.Length);
...
}
đây text
là một bắt biến ... do đó, ngay cả khi bạn chỉ cần tạo một Func<int>
, nó sử dụng tham số phương pháp.
6
Bạn có thể sử dụng quá tải Task.Factory.StartNew() để truyền trong đối tượng "trạng thái" chứa tất cả các tham số bạn muốn sử dụng. Dưới đây là một ví dụ rất cơ bản đi qua trong một NameValueCollection, nhưng bạn rõ ràng có thể vượt qua trong bất kỳ loại đối tượng mà bạn muốn.
Task<bool>.Factory.StartNew(
(a) => {
NameValueCollection nvc = a as NameValueCollection;
if(nvc != null) {
nvc.AllKeys.ForEach(k => Console.WriteLine(nvc[k]));
}
return true;
},
new NameValueCollection() { { "param1", "hithere!" } });
Các vấn đề liên quan
- 1. C# Func <> và generics
- 2. Chuyển đổi Func <T, String> thành Func <T, bool>
- 3. C# Action <> với Func <> tham số
- 4. Expression <Func <T, bool>> từ F # func
- 5. Cách sử dụng Task.Run (Hành động <T>)
- 6. Moq framework Func <T,T>
- 7. động Func <IQueryable <TEntity>, IOrderedQueryable <TEntity>> Biểu hiện
- 8. Body từ Func <T>
- 9. Nullable Func <T, TResult>
- 10. Tự động đặt Func <> loại
- 11. C# Làm thế nào để chuyển đổi một biểu thức <Func <SomeType>> thành biểu thức <Func <OtherType>>
- 12. Java tương đương với .NET Action <T> và Func <T,U>, v.v.
- 13. Hành động đóng gói <T> và Func <T>?
- 14. Tại sao Func <> và Expression <Func<>> Hoán đổi cho nhau? Tại sao một người làm việc trong trường hợp của tôi?
- 15. Làm thế nào để đúc Expression <Func <T, DateTime>> để Expression <Func <T, object>>
- 16. Cách chuyển đổi Expr <'a -> 'b> thành Biểu thức <Func <'a, obj>>
- 17. LINQ-to-SQL: Chuyển đổi Func <T, T, bool> thành Biểu thức <Func <T, T, bool>>
- 18. Làm cách nào để tôi có thể thực hiện một hoạt động Func <object [], Expression <Func<T,bool> >>?
- 19. Tại sao chọn Func <T,bool> thay vì Predicate <T>?
- 20. Làm thế nào để chuyển đổi IQueryable <T> thành Biểu thức <Func <T, bool>>?
- 21. Entity Framework Lọc "Expression <Func <T, bool>>"
- 22. Cách tạo Biểu thức <Func <động, động >> - Hay là một lỗi?
- 23. Trả về biểu thức chung chung lồng nhau <Func <T, bool>>
- 24. Thay thế cho loại lồng nhau loại Expression <Func<T>>
- 25. Cách chuyển đổi LambdaExpression thành Biểu thức được nhập <Func<T, T>>
- 26. LINQ Expression <Func <T, bool>> equavalent của Chứa()
- 27. Từ BinaryExpression để Expression <Func <T, bool>>
- 28. Func <T> với tham số ngoài
- 29. C# Func <> đại biểu trong thư viện
- 30. Func <T, TResult> for with void TResult?
Chủ đề đó có an toàn không? – BVernon
@BVernon: Giả sử bạn không thay đổi giá trị của 'văn bản' sau này, có vẻ ổn với tôi. –
Tôi nghĩ rằng tôi chỉ quên một số công cụ thực sự cơ bản ... nếu tôi gọi DoSomething nhiều lần với các giá trị khác nhau cho văn bản thì sẽ có một bản sao của mỗi phiên bản trong bộ nhớ cho mỗi cuộc gọi, phải không? – BVernon