小编use*_*335的帖子

WCF ServiceContract的方法返回Task <T>并超时

我是WCF的新手.我正在制作一项服务,我需要在其中计算冗长的操作.由于该方法很长,我以为我可以通过返回一个Task来使操作异步.但它不起作用.我还在收到Timeout异常.示例代码(不是我的实际代码)演示了我的问题如下:

[ServiceContract]
public interface ICalculator
{
   [OperationContract] 
   Task<double> ComputePiAsync(ulong numDecimals);
}

internal class Calculator : ICalculator
{
    public async Task<double> ComputePiAsync(ulong numDecimals)
    {
        return await SomeVeryVeryLongWayOfComputingPi(numDecimals);
    }
}

// server
using (var host = new ServiceHost(typeof(Calculator), new Uri("net.pipe://localhost")))
{
    host.AddServiceEndpoint(typeof(ICalculator), new NetNamedPipeBinding(), "Calculator");
    host.Open();

    Console.WriteLine("Service is running. Press <ENTER> to exit.");
    Console.ReadLine();

    host.Close();
}

// client
var factory = new ChannelFactory<ICalculator>(new NetNamedPipeBinding(), new EndpointAddress("net.pipe://localhost/Calculator"));
var calculator = factory.CreateChannel();
await calculator.ComputePiAsync(numDecimals); // <--- this call takes longer than 1 minute and …
Run Code Online (Sandbox Code Playgroud)

wcf

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

memcpy的pod结构数组到数组

struct Point
{
    double X;
    double Y;
};
Run Code Online (Sandbox Code Playgroud)

Q1)是以下便携式(编译器/机器)

Point point = { 1.1, 2.2 };
double arr[2] = {};
memcpy(arr, point, sizeof(double)*2);
Run Code Online (Sandbox Code Playgroud)

Q2)结构数组相同

Point *pPoints = new Point[numPoints];
double *pArr = new double[2*numPoints];
memcpy(pArr, pPoints, sizeof(double)*2*numPoints);
Run Code Online (Sandbox Code Playgroud)

在Windows/MSVC上,我期待两者都能成功.

编辑:我不是为每个可能的结构/类别问这些问题; 我要求结构"Point"的这种特殊情况(注意:只有2个pod,没有virtualmember/user构造函数/用户构造函数).这可能是一个C问题,它与编译器的结构对齐和内存布局有关.

到目前为止,我已经知道c/c ++标准没有对Point的布局强制执行任何操作,因此我必须使用静态断言来确保它,对吗?

c++

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

标签 统计

c++ ×1

wcf ×1