我建立包含一个F#文件的项目和构建过程中存在的39行错误:这种表达预计将有型异步<'a>但这里已经输入的DispatcherOperation
这表达预计将有型异步<“一>但这里有类型的DispatcherOperation
open System
open System.Collections.Generic
open System.Collections.ObjectModel
open System.Linq
open System.Net
open System.Reactive.Disposables
open System.Runtime.CompilerServices
open System.Threading
open System.Windows
open System.Windows.Threading
open Microsoft.Practices.Unity
type IActivityContext<'TResult> = interface
abstract container: IUnityContainer
abstract Success: result:'TResult -> unit
abstract Error: error:Exception -> unit
abstract Cancel: unit -> unit
abstract RegisterCancellationCallback: callback:Action->IDisposable
end
[<Extension>]
type ActivityExtensions private() = class
[<Extension>]
static member StartViewActivity<'TResult>(container: IUnityContainer, callback: Action<IActivityContext<'TResult>>)= async{
let! ct = Async.CancellationToken
return! Async.FromContinuations(fun (success, error, cancel) ->
let context = {
new IActivityContext<'TResult> with
member this.container = container
member this.Success(result:'TResult) = success(result)
member this.Error(err:Exception) = error(err)
member this.Cancel() = cancel(new OperationCanceledException())
member this.RegisterCancellationCallback(callback: Action) =
ct.Register(callback) :> IDisposable
}
let disp = Application.Current.Dispatcher
Async.StartWithContinuations(
(* ERROR -> *) disp.InvokeAsync((fun() -> callback.Invoke(context))),
(fun()->()),
error,
cancel,
ct
)
)
}
end
有谁知道为什么这个错误即将到来,如何解决?
为什么要在这里使用'Async.AwaitIAsyncResult'而不是'Async.AwaitTask'?后者更清晰(大多数人不知道'IAsyncResult'是什么),并且可能会更有效率。 – svick
在'async'内使用'Invoke'不会使代码异步。你可能直接调用'disp.Invoke()'。 – svick
@svick谢谢,我'修复'了'Async.AwaitTask'。第二个例子是为了“让类型匹配”,但我应该正确解释。 – CaringDev