相关疑难解决方法(0)

创建一个已完成的任务<T>

我正在实现一个方法,Task<Result> StartSomeTask()并且在调用方法之前就已经知道了结果.如何创建已完成的Task <T>

这就是我目前正在做的事情:

private readonly Result theResult = new Result();

public override Task<Result> StartSomeTask()
{
    var task = new Task<Result>(() => theResult);
    task.RunSynchronously(CurrentThreadTaskScheduler.CurrentThread);
    return task;
}
Run Code Online (Sandbox Code Playgroud)

有更好的解决方案吗?

.net c# task-parallel-library

118
推荐指数
3
解决办法
4万
查看次数

Parallel.ForEachAsync 是否可以替代普通的 for 循环 + 附加到任务列表 (async wait Task.Run)+ WhenAll?

假设我想发出并行 API post 请求。

在 for 循环中,我可以将 http post 调用附加到任务列表中(使用 Task.Run 调用的每个任务),然后等待所有任务完成使用await Task.WhenAll. 因此,在等待网络请求完成时,控制权将交给调用者。实际上,API 请求将并行发出。

同样,我可以使用Parallel.ForEachAsync它将自动执行WhenAll并将控制权返回给调用者。所以我想问是否ForEachAsync可以替换普通的 for 循环列表(async wait Task.Run)和WhenAll

c# asynchronous async-await parallel.foreachasync

8
推荐指数
1
解决办法
5021
查看次数

我应该将工作卸载到 ASP.NET 中的其他线程吗?

我正在创建 ASP.NET Web API,其中某些操作(同步、遗留代码)可能需要一些时间(主要是 IO 限制,但也有一些计算密集型的东西)。

我知道每个传入请求都从线程池中分配了一个线程,但我对其余部分有点模糊。请求线程是否以某种方式“特殊”,保证将工作卸载到其他线程以避免锁定它?卸载对线程池饥饿和拒绝请求有帮助吗?如果是这样,我是否需要一直为每个可能长时间运行的函数创建一个异步包装器,还是只需要一个最高级别的异步包装器?

.net asp.net multithreading asynchronous async-await

5
推荐指数
1
解决办法
233
查看次数

在ASP.NET中,为什么DbSet.LastAsync()不存在?

我已经制作了一些代码来实现一些Web API.此API方法返回Foo Table的最后一条记录.

public class FooController : ApiController
{
    private FooContext db = new FooContext();

    // GET: api/Foo
    [ResponseType(typeof(Foo))]
    public async Task<IHttpActionResult> GetLastFoo()
    {
        Foo foo = await db.Foo.Last();
        if (foo == null)
        {
            return NotFound();
        }
        return Ok(foo);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想让这个API异步,但没有LastAsync()方法.为什么以及如何解决它?提前致谢.

asp.net async-await asp.net-web-api entity-framework-6

0
推荐指数
1
解决办法
232
查看次数