相关疑难解决方法(0)

TPL TaskFactory.FromAsync vs任务与阻塞方法

我想知道在使用TPL TaskFactory.FromAsync和使用TaskFactory.StartNew阻塞版本的方法之间是否存在性能影响.我正在编写一个TCP服务器,它将支持不超过100个并发连接.在使用第一个选项编写代码并使用continue来链接多个读写操作之后,我留下了丑陋,难以调试的代码.

我相信用同步版本编写代码然后用Task包装它会降低复杂性并提高可测试性,但是我担心这样做的性能影响.

例如,这两个调用之间是否存在任何性能差异:

NetworkStream stream;
byte[] data;
int bytesRead;

//using FromAsync
Task<int> readChunk = Task<int>.Factory.FromAsync (
      stream.BeginRead, stream.EndRead,
      data, bytesRead, data.Length - bytesRead, null);

//using StartNew with blocking version
Task<int> readChunk2 = Task<int>.Factory.StartNew(() => 
      stream.Read(data, bytesRead, data.Length - bytesRead));
Run Code Online (Sandbox Code Playgroud)

networkstream task task-parallel-library taskfactory c#-4.0

20
推荐指数
2
解决办法
2万
查看次数

你在使用Parallel Extensions吗?

我希望这不是滥用stackoverflow; 最近我在Parallel Extensions上看到了一些很棒的问题,引起了我的兴趣.

我的问题:你使用的是Parallel Extensions,如果有的话,怎么样?

我的名字是Stephen Toub,我是微软的并行计算平台团队的成员.我们是负责Parallel Extensions的小组.我一直很想知道开发人员如何利用Parallel Extensions(例如Parallel.For,PLINQ,ConcurrentDictionary等),积极的体验,你曾经拥有的负面体验,对未来的特征要求等等.上.
如果您愿意分享此类信息,请在此处作为对此问题的回复,或通过电子邮件私下给我stoub at microsoft dot com.

我非常期待收到你的来信.

提前致谢!

.net parallel-processing task plinq task-parallel-library

16
推荐指数
1
解决办法
624
查看次数

套接字编程的APM,EAP和TPL

我发现[...] Async和Begin [...] .net异步API之间存在差异,这个答案让我有点困惑.

谈到这些模式,斯蒂芬说:

大多数*异步方法(具有相应的*已完成事件)正在使用基于事件的异步模式.较旧(但仍然完全有效)的Begin*和End*是一种称为异步编程模型的模式.

Socket类是此规则的一个例外; 它的*异步方法没有任何相应的事件; 它本质上只是APM以避免过多内存分配的方式完成的.

我得到它使用*Async方法更有效,至少在套接字方面.但后来他提到任务并行库:

但是,APM和EBAP都被基于任务并行库的更灵活的方法所取代.由于TPL可以轻松地包装APM,因此较旧的类可能不会直接更新; 扩展方法用于为旧的APM方法提供Task等价物.

我在MSDN上发现了TPL和传统.NET异步编程,我知道TPL的基础知识,创建任务,取消,延续等等,但我仍然无法理解这些:

异步编程模型(APM)和基于事件的异步模式(EAP)相互比较的优势是什么?TPL如何轻松地包装 APM意味着APM和EAP都 TPL 取代

最重要的是:我应该在套接字编程中使用哪个;

  • APM?
  • EAP?
  • 任务包裹的APM或EAP?
  • TPL通过在任务中使用Socket类的阻塞方法?
  • 其他?

c# sockets design-patterns asynchronous task-parallel-library

9
推荐指数
2
解决办法
3712
查看次数

如何在多线程c#中使用TCP客户端/监听器?

我已经为我的服务器编写了这段代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Net;
    using System.Threading;
    using System.Net.Sockets;
    using System.IO;


namespace ConsoleApplication1
{
    class Program
    {
        private static bool terminate;

        public static bool Terminate
        {
            get { return terminate; }
        }

        private static int clientNumber = 0;
        private static TcpListener tcpListener;

        static void Main(string[] args)
        {
            StartServer();
            Console.Read();
        }

        private static void StartServer()
        {
            try
            {
                Console.WriteLine("Server starting...");
                tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 8000);
                terminate = false;
                tcpListener.Start();
                tcpListener.BeginAcceptTcpClient(ConnectionHandler, null);
                Console.ReadLine();

            } …
Run Code Online (Sandbox Code Playgroud)

c# network-programming tcp tcplistener tcpclient

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

异步套接字编程和F#

我有一个WCF服务,它使用套接字异步,我有一些性能问题,所以我决定重构代码,我读了一些关于F#的异常和多线程的易用性的文章,等等,但我想知道使用F#parallelism我会获得更好的性能吗?并且它很容易与WCF服务兼容,我有大量的数据应该通过套接字传输(在tcp上),因此拥有良好的性能和并行算法非常重要.

c# sockets f# asynchronous c#-to-f#

-2
推荐指数
1
解决办法
2606
查看次数