Попытка выполнить некоторое асинхронное программирование через потоки. Для начала, я пытаюсь простой случай: отображение списка параллельно. Код пока выглядит так:
let doWork (x:('a -> string)) (y:'a) (z:string ref) (finished:bool ref) =
ThreadPool.QueueUserWorkItem( fun _ -> z:= x y
finished:= true)
let dualmap (x:'a list) (y:'a -> string) (z:string -> 'b) =
let acc = []
let rec dual (x:'a list) (y:'a -> 'b) (acc:'b list) =
match x with
| [] -> acc
| [i] -> (y i)::acc
| i::j::tl -> let un = ref ""
let deux = ref ""
let unfin = ref false
let deuxfin = ref false
doWork y i un unfin |> ignore //case i
doWork y j deux deuxfin |> ignore //case j
while not(unfin)||not(deuxfin) do Thread.Sleep(0)
let uno = z !un
let dos = z !deux
dual tl y (dos::(uno::acc))
dual x y acc
Однако я не уверен, как заставить потоки работать, так как они кажутся obj -> unit
, а не 'a -> 'b
или 'a -> 'b -> 'c
, что мне и нужно.
Вместо этого я должен убедиться, что знаю, как преобразовать каждый объект, который у меня есть, в строку, а затем преобразовать его обратно. Кажется, должен быть более простой способ сделать это?