- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个返回任务的方法,例如:
public static Task<int> SendAsync(this Socket socket, byte[] buffer, int offset, int count)
{
if (socket == null) throw new ArgumentNullException("socket");
if (buffer == null) throw new ArgumentNullException("buffer");
return Task.Factory.FromAsync<int>(
socket.BeginSend(buffer, offset, count, SocketFlags.None, null, socket),
socket.EndSend);
}
最佳答案
如果您的界面要求您返回一个任务,那么您最终可能会不必要地在线程池上安排工作,只是为了进行 BeginSend() 调用(这是在上一个答案中发生的事情,其中 FromAsync() 调用被另一个任务包装)。
相反,如果您能够更改接口(interface),则可以使用标准的延迟执行技术,例如:
public static Func<Task<int>> SendAsync(this Socket socket, byte[] buffer, int offset, int count)
{
if (socket == null) throw new ArgumentNullException("socket");
if (buffer == null) throw new ArgumentNullException("buffer");
return () =>
Task.Factory.FromAsync<int>(
socket.BeginSend(buffer, offset, count, SocketFlags.None, null, socket),
socket.EndSend);
}
Func<Task<int>> sendAsync = socket.SendAsync(buffer, offset, count);
sendAsync().ContinueWith(
antecedent => Console.WriteLine("Sent " + antecedent.Result + " bytes."));
public class DelayedTask<TResult>
{
private readonly Func<Task<TResult>> func;
public DelayedTask(Func<Task<TResult>> func)
{
this.func = func;
}
public Task<TResult> Start()
{
return this.func();
}
}
public static DelayedTask<int> SendAsync(this Socket socket, byte[] buffer, int offset, int count)
{
if (socket == null) throw new ArgumentNullException("socket");
if (buffer == null) throw new ArgumentNullException("buffer");
return new DelayedTask<int>(() =>
Task.Factory.FromAsync<int>(
socket.BeginSend(buffer, offset, count, SocketFlags.None, null, socket),
socket.EndSend));
}
DelayedTask<int> task = socket.SendAsync(buffer, offset, count);
task.Start().ContinueWith(
antecedent => Console.WriteLine("Sent " + antecedent.Result + " bytes."));
关于.net - 在任务并行库 : How to defer Task. TaskFactory.FromAsync 任务执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4031378/
如果我从 UI 中单击按钮开始计算密集型 TPL 任务,这里哪种方法最好: TaskFactory.StartNew 或 TaskFactory.FromAsync ?我需要以下内容:任务不能挂 UI
我在使用 TaskFactory 时遇到了一些奇怪的问题: Task parent = Task.Run(() => { int length = 100; var results =
我发现了很多使用 TaskFactory 的方法,但我找不到任何有关启动更多任务以及观察一个任务何时结束并开始另一个任务的方法。 我总是希望有 10 个任务在工作。 我想要这样的东西 int nTot
如果我将使用 TaskFactory.StartNew(MyFunc(), new CancellationToken(), TaskCreationOptions.None, TaskSchedul
我有以下代码: var factory = new TaskFactory(); for (int i = 0; i foo(i1)); } static void foo(int i) {
如何使用 TaskFactory 创建新的 UI 元素?当我尝试时出现以下错误: 调用线程必须是 STA,因为很多 UI 组件都需要这个。 示例代码 Dim txtBoxList as new Lis
注意:这是在Unity3D下 我需要使用自定义同步上下文运行内部任务,如下所示: 外部任务 -> 在默认调度程序上 内部任务 -> 在具有自定义同步上下文的自定义调度程序上 这是因为内部任务中的某些对
我正在使用 TaskFactory 使用以下代码启动新任务。 var task = Task.Factory.StartNew(async () => { await Task.Run(()
详见 TPL and Traditional .NET Framework Asynchronous Programming MSDN 文章和 Stephen Toub 的 Tasks and the
大约有 1000 个任务在运行,但有时我会收到任务调度程序抛出的以下内存不足异常。可能是什么原因以及如何避免。 System.Threading.Tasks.TaskSchedulerExceptio
在 .NET 4.0 中使用 TPL 启动新的仅产生副作用的任务(即:不返回任何结果的任务)的惯用方法是使用以下 API: Task Task.Factory.StartNew(Action, obj
显然是 TaskFactory.StartNew .NET 4.0 中的方法旨在替代 ThreadPool.QueueUserWorkItem ( according to this post, an
我有一个 NServiceBus 主机,一旦有关特定用户帐户的消息通过,它就会去下载一大堆数据。一个数据文件大约 3Mb(myob - 通过网络服务调用),另一个大约 2Mb(restful 端点,相
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Cancellation token in Task constructor: why? 此方法接收一个 C
除了最常见的仅使用“action”参数调用 TaskFactory.StartNew 的形式(1) https://msdn.microsoft.com/en-us/library/dd321439(
http://msdn.microsoft.com/en-us/library/dd988458.aspx 更新: 所以,让我们讨论这篇文章:http://msdn.microsoft.com/en-
我有一个返回任务的方法,例如: public static Task SendAsync(this Socket socket, byte[] buffer, int offset, int coun
我想知道在方法的阻塞版本上使用 TPL TaskFactory.FromAsync 和使用 TaskFactory.StartNew 之间是否存在任何性能影响。我正在编写一个 TCP 服务器,它支持不
我听说线程的责任应该由应用程序承担,我不应该在异步方法中使用 Task.Run 或 TaskFactory.StartNew 。 但是,如果我有一个库,其中的方法执行相当繁重的计算,那么要释放例如接受
我正在尝试测试一些依赖 Task 进行后台计算的类(从网络位置检索数据)。该类获取一个未启动的任务实例,添加一个 ContinueWith 方法,然后在该任务上调用 Start。像这样的东西: pri
我是一名优秀的程序员,十分优秀!