fTask (job: unit -> Task<'T>) = task {
if false then
failwith "error"
let! result = job()
return result
}
let fAsync (job: unit -> Async<'T>) = async {
if false then
return failwith "error"
let! result = job()
return result
}
// resultAsync
fun() -> async.Return("test")
|> fAsync
|> Async.RunSynchronously
|> printfn "%A"
// resultTask
fun() -> Task.FromResult("123")
|> fTask
|> Async.AwaitTask
|> Async.RunSynchronously
|> printfn "%A"
а вот так не работет (#2 вариант Rustam)
open System.Threading.Tasks
let fTask (job: unit -> Task<'T>) = task {
if false then
return failwith "error"
let! result = job()
return result
}
let fAsync (job: unit -> Async<'T>) = async {
if false then
return failwith "error"
let! result = job()
return result
}
let result = (fAsync (fun() -> async.Return("test"))) |> Async.RunSynchronously
printfn $"{result}"
let result = (fTask (fun() -> Task.FromResult("123"))).GetAwaiter().GetResult()
printfn $"{result}"
Так, в первом варианте не fun() -> (async.Return("test") |> ...) ли?
эта часть в обоих варинтах работает не работает вот эта часть у Rustam: let result = (fTask (fun() -> Task.FromResult("123"))).GetAwaiter().GetResult()
fun() -> Task.FromResult("123") |> fTask Это точно одно и то же с fTask (fun() -> Task.FromResult("123")) ?
Нет, и это влияет на инференс
а в чём разница-то? о_О
я просто return в ифе забыл :) #1 https://sharplab.io/#v2:DYLgZgzgNALiBOBXAdlAJiA1AHwPYAcBTZAAgGUBPCGQgWwDoAVAC3kIEM0BLZAcyfYQA1hACwAKAnBCMEiTCNBQkgAoAVrgBGIEii6yAtAD4Si4QB4A5IyMBKEgF4SMJSQDeEuV65h57YBCEzszEnl7hJAD0kWwwiPCkYOxcwADu+swkAESE8PC48FlhEXJJKekwmTl5BVlRkSSA8iAkgPwggAIggHwggIIggEIgHSSx8aSA7CCADCCAjCCA0iCA3CAkILYSxXLSMACEA4QQiMCyThqaKgviEYMJG1s7EgC+i+IrpQCCEBTIAMaq+zp6hiZPL69WGz2JyCf7uJYkHx+AJBSqhY4lOSnRLJNIZbK5fKFCErdZsC67Ej7Q4Q5HnbYwa63aLknZ/N4SMAoQ4kYwkUFvegAJRkQxUWRo1CyR2wJjA9NeElFJAl3JQlDerFwyFwiAgwAoUpM+HgPBgYFIWQApA8ipJxDT8RSzEIJComcgWWybfQAGL5Wg8gn8gCMACYAMzCkVim1amXPTkPVLJGBh8TS2Vc+X/JUqtUa8M6vUG7ImrJAA=== #2 https://sharplab.io/#v2:DYLgZgzgNALiBOBXAdlAJiA1AHwPYAcBTZAAgGUBPCGQgWwDoAVAC3kIEM0BLZAcyfYQA1hACwAKAnBCMEiTCNBQkgAoAVrgBGIEii6yAtAD4Si4QB4A5IyMBKEgF4SMJSQDeEuV65h57YBCEzszEnl7hJAD0kWwwiPCkYOxcwADu+swkAESE8PC48FlhEXJJKekwmTl5BUWS4hHSMACEJGwQiMCyThqaKrbFcrHxpO2dMBIAvhJSMqUAghAUyADGqr06eoYmi8srVjb2ToJ77oMkPn4BQZWhDSVDMiN+5RnZufmF502tY12OJF6/XOwwSbUIHS6Uxm4iaj0hMF2qwBKjASLWqJQ/RIxhIJ1W9AASk8EiosjRqFlbNSSNgdksCYSUJRVqxcMhcIgIMAKBJ8PAeDAwKQACRZNx/REMlaTOqzWTghFmZROVHK1RgLH2XHK+gAMXytGJCLJAEYAEwAZip1PoAHEZPNUskaPB+vaZMbxsDxPzBcKSGKJRDxsrZUA
Так с ретурн и без - разные кейсы
не мой кейс (я бы без return делал - собственно, потому и проглядел его)
Обсуждают сегодня