jjzjj

TaskCompletionSource

全部标签

c# - 如何使用超时取消 TaskCompletionSource

我有使用await关键字异步调用的函数:publicTaskRequestStateForEntity(EntityKeyentity,stringpropName){vartcs=newTaskCompletionSource();try{varpropInstance=BuildCacheKey(entity,propName);StateCacheItemcacheItem;if(_stateCache.TryGetValue(propInstance,outcacheItem)){tcs.SetResult(newStateInfo(cacheItem.State.Name,c

c# - 将任何给定的函数转换为可等待的任务

以下代码的目标是将任何给定函数转换为可等待函数。这个想法是在从数据库中获取数据时使用它,从而使代码可以灵活地使用同步获取函数(我当前ORM的强加),或者使用与异步完全相同的函数。我知道代码背后的概念可能有很多问题。到目前为止,我只是试图摆脱编译器错误,以便我可以运行代码并检查行为。但是我当然愿意事先讨论这个概念,如果它背后的整个想法是错误的,那么我会更有效地利用我的时间寻找另一个解决方案。asyncstaticvoidMain(){//Thefollowinglinegivesacompilererror://Error1Thebestoverloadedmethodmatchfor'

c# - 在什么情况下 TaskCompletionSource.SetResult() 会同步运行延续?

最初我认为所有的延续都是在线程池上执行的(给定一个默认的同步上下文)。然而,当我使用TaskCompletionSource时,情况似乎并非如此。我的代码看起来像这样:TaskFoo(){_tcs=newTaskCompletionSource();return_tcs.Task;}asyncvoidBar(){Console.WriteLine(Thread.Current.ManagedThreadId);Console.WriteLine($"{Thread.Current.ManagedThreadId}-{awaitFoo()}");}Bar在特定线程上被调用并且TaskCo

c# - 带有 TaskCompletionSource 的 TaskCreationOptions 的目的是什么?

关于TaskCompletionSource的内部运作,我有些不清楚.创建简单的Task时使用Factory,我希望这个任务在线程池中排队,除非我指定TaskCreationOptions.LongRunning,它将改为在新线程中运行。我对TaskCompletionSource的理解,是我负责在任务结束或失败时触发,并且我完全控制如何管理线程。然而,TaskCompletionSource的负责人允许我指定TaskCreationOptions,这让我很困惑,因为我期待Scheduler无法自行处理任务。TaskCreationOptions的目的是什么?在TaskCompleti

c# - 编写一个等待 bool 值的异步方法

我想编写一个方法来等待将变量设置为true。这是伪代码。boolIsSomethingLoading=falseSomeDataTheData;publicasyncTaskGetTheData(){awaitIsSomethingLoading==true;returnTheData;}TheData将由PrismEvent与IsSomethingLoading变量一起设置。我调用了GetTheData方法,但我希望它异步运行(现在它只在数据未准备好时返回null。(这会导致其他问题。)有办法吗? 最佳答案 在许多类似的情况下,您

c# - TaskCompletionSource 抛出 "An attempt was made to transition a task to a final state when it had already completed"

我想使用TaskCompletionSource来包装MyService这是一个简单的服务:publicstaticTaskProcessAsync(MyServiceservice,intparameter){vartcs=newTaskCompletionSource();//EverytimeProccessAsynciscalledthisassignstoCompleted!service.Completed+=(sender,e)=>{tcs.SetResult(e.Result);};service.RunAsync(parameter);returntcs.Task;}

c# - 如何使用 TaskCompletionSource.SetException 保留等待行为?

(这是对这个问题的新尝试,现在更好地证明了这个问题。)假设我们有一个错误任务(varfaultedTask=Task.Run(()=>{thrownewException("test");});),我们等待它。await将解压AggregateException并抛出底层异常。它将抛出faultedTask.Exception.InnerExceptions.First()。根据ThrowForNonSuccess的源代码,它将通过执行任何存储的ExceptionDispatchInfo来执行此操作,大概是为了保留良好的堆栈跟踪。如果没有ExceptionDispatchInfo,它不

c# - 从 TaskCompletionSource 返回 Task 而不是 Task<TResult>

正如我在几个codingexamples中看到的那样,以及我从这个SOquestion中可以理解的内容我应该能够从TaskCompletionSource返回一个非通用任务(i.e.,ReturnTaskandnotTaskfromthemethodUploadFilesAsync)还有下面的代码:publicasyncTaskUploadFilesAsync(stringfileAPath,stringfileBPath){vartcs=newTaskCompletionSource();//logictoprocessfilestry{awaitTask.WhenAll(uploa

c# - 如何结合 TaskCompletionSource 和 CancellationTokenSource?

我有这样的代码(此处已简化)等待完成任务:vartask_completion_source=newTaskCompletionSource();observable.Subscribe(b=>{if(b)task_completion_source.SetResult(true);});awaittask_completion_source.Task;想法是订阅并等待bool值流中的true。这完成了“任务”,我可以继续超越await。但是我想取消--但不是订阅,而是等待。我想将取消token(以某种方式)传递给task_completion_source,因此当我取消token源时

c# - TaskCompletionSource 和 dismiss 导致多个自定义警报对话框没有出现

我遇到了与TaskCompletionSource对象和警报的Dismiss函数相关的问题。IOS版本的应用中没有出现这个问题当应用程序发送通知时,当用户激活应用程序时,将显示两个具有工作功能的警报:身份验证填写一个值。但是,当我进入应用程序时,我只能看到身份验证(因为此警报首先在应用程序中调用),而第二个警报永远不会出现。我已经尝试覆盖Dismiss函数并将TaskCompletionSource对象结果设置为null,但这会导致相同的警报在应用程序崩溃前出现X次。有没有办法重复TaskCompletionSource对象,以便我可以看到所有警报?或者我需要对Dismiss函数进行什