Tôi muốn sử dụng phương pháp này từ việc triển khai HttpListener của Owin:
Tạo IDisposable tĩnh công khai (thuộc tính AppFunc, IDictionary)
AppFunc có chữ ký này:
IDictionnary -> Nhiệm vụ
Tôi muốn tạo một tác vụ nhưng nó yêu cầu một Hành động và tôi không biết cách thực hiện nó trong F#. Điều tốt nhất tôi đã làm cho đến nay là sử dụng cái này question Mã trong:
mô-đun CsharpAction
mở hệ thống
gõ Wrapper<'T>(f:'T -> unit) =
thành viên x.Invoke(a:'T) = fa
hãy để makeAction (typ:Type) (f:'T -> unit) =
hãy để actionType = typedefof>.MakeGenericType(typ)
hãy để WrapperType = typedefof>.MakeGenericType(typ)
hãy bọc = Wrapper<_>(f)
Delegate.CreateDelegate(actionType, được bao bọc, được bao bọc.GetType().GetMethod("Gọi"))
chương trình.fs
hãy để yymmdd1 (ngày:DateTime) = date.ToString("yy.MM.dd")
hãy printSuccess = fun() -> printfn "Thành công %s" (yymmdd1 DateTime.Now )
hãy để actionTask = CsharpAction.makeAction (typeof) (printSuccess)
hãy để các thuộc tính có thể thay đổi = Từ điển (dict [("fooKey", new Object())])
let server = OwinServerFactory.Create((fun (props) -> new Task(actionTask)) , thuộc tính)
Sau đó nó nói với tôi:Biểu thức này lẽ ra phải có kiểu hành động nhưng ở đây nó có kiểu delegate
Tôi có nên cung cấp Hành động từ mã F# đến C# không? Hoặc tôi có nên xử lý mã C# để cung cấp một số chi tiết cho f#, như chờ đại biểu thay vì một thao tác không?
Tôi đang vượt quá giới hạn hiểu biết của mình và tôi cảm thấy đau đớn. Chắc chắn là tôi sẽ phải học hỏi rất nhiều, nhưng nếu bạn muốn giúp tôi bước lên bước đầu tiên...
Bạn không cần sử dụng sự phản chiếu để tạo đại biểu trong F#. Bạn có thể bỏ hoàn toàn phần đầu tiên của mã (của bạn CsharpHành động
mô-đun).
Đối với đoạn mã thứ hai, hãy thử điều này:
mở hệ thống
mở System.Collections.Generic
mở System.Threading.Tasks
hãy để yymmdd1 (ngày: DateTime) = date.ToString "yy.MM.dd"
let printSuccess() = printfn "Thành công %s" (yymmdd1 DateTime.Now)
hãy để máy chủ =
let actionTask = Hành động printSuccess
hãy để thuộc tính = Từ điển (dict ["fooKey", obj ()])
OwinServerFactory.Create((đạo cụ vui nhộn -> Nhiệm vụ mới (actionTask)), thuộc tính)
Tôi là một lập trình viên xuất sắc, rất giỏi!