我有以下路由映射或WEB API
[Route("Foo/Id/{id=1}/bar")]
Run Code Online (Sandbox Code Playgroud)
我想让Id可选如上所述但是从客户端无论我称之为路线不匹配我得到404我试试像
Foo/Id//bar
Run Code Online (Sandbox Code Playgroud)
但是不起作用.如果参数不在最后,是否可以使用web api的可选参数?
当我有以下代码时:
[<Struct>]
type Person = { mutable FirstName:string ; LastName : string}
let john = { FirstName = "John"; LastName = "Connor"}
john.FirstName <- "Sarah";
Run Code Online (Sandbox Code Playgroud)
编译器抱怨"一个值必须是可变的才能改变内容".但是,当我删除Struct属性时,它工作正常.为什么会这样 ?
根据文档,您可以使用对象表达式实现多个接口。但是如果你看到下面的代码:
// Define two interfaces
type IFirst =
abstract F : unit -> unit
abstract G : unit -> unit
type ISecond =
abstract H : unit -> unit
abstract J : unit -> unit
// This object expression implements both interfaces.
let implementer : IFirst =
{ new ISecond with
member this.H() = ()
member this.J() = ()
interface IFirst with
member this.F() = ()
member this.G() = () }
Run Code Online (Sandbox Code Playgroud)
所以强制转换IFirst会导致编译器错误。为什么呢?
假设我有以下代码:
namespace Library1
open System.Threading.Tasks
open System.Threading
open System.Runtime.Remoting.Messaging
open System
type public Class1() =
let printThread (message) =
printfn "%s %A" message Thread.CurrentThread.ManagedThreadId
let bar =
printThread ("first bar")
async {
printThread ("first async")
do! Async.Sleep(1000)
printThread "last async"
}
member this.X() = bar
Run Code Online (Sandbox Code Playgroud)
我想使用此类并从C#调用X。问题是X返回Async <'T>。但是,公开F#特定类型是不好的做法。因此,最佳实践是返回任务。但是Async.StartAsTask有点问题,因为它将导致代码在单独的线程中运行。我想要的是我想返回一个Task,但它也应该表现为Async.StartImmediate。因此,代码的非异步部分应在原始主线程中运行。在这里,我假设我从UI线程运行它,以便所有调用都将返回相同的线程ID。换句话说,我想要一个Async.StartImmediate但返回一个任务。这可以实现吗?
我有以下C#代码尝试在发布模式下进行基准测试:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication54
{
class Program
{
static void Main(string[] args)
{
int counter = 0;
var sw = new Stopwatch();
unchecked
{
int sum = 0;
while (true)
{
try
{
if (counter > 20)
throw new Exception("exception");
}
catch
{
}
sw.Restart();
for (int i = 0; i < int.MaxValue; i++)
{
sum += i;
}
counter++;
Console.WriteLine(sw.Elapsed);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在64位机器上安装了VS 2015.当我在32位下运行代码时,它每次迭代运行大约0.6秒 …
我正在尝试调试用 F# 编写的 xunit 测试。我在 .NET Core 上并在 Windows 平台上使用 Visual Studio Code。这可能吗?PS 我知道关于此事还有另一个问题,但在这种情况下,它是特定于 F# 的。
如果我对 x86 cpu 的理解正确,超线程是有益的,尤其是当我们有 IO 调用时,这样当阻塞线程空闲时,另一个线程可以廉价地在同一个 CPU 上工作。我的问题是缓存未命中是否也会发生同样的事情。那么在等待数百个周期从主内存中获取数据的同时,其他线程可以在同一个物理 CPU 上执行一些代码吗?
我正在阅读 Apress 的现代 x86 汇编语言书籍。对于编程 64 位 SSE 示例,作者将align 16放在代码中的特定点上。例如
.code
ImageUint8ToFloat_ proc frame
_CreateFrame U2F_,0,64 ; helper macros to create prolog
_SaveXmmRegs xmm10,xmm11,xmm12,xmm13 ; helper macros to create prolog
_EndProlog ; helper macros to create prolog
...
shrd r8d,
pxor xmm5,xmm5
align 16 ; Why this is here ?
@@:
movdqa xmm0,xmmword ptr [rdx]
movdqa xmm10,xmmword ptr [rdx+16]
movdqa xmm2,xmm0
punpcklbw xmm0,xmm5
punpckhbw xmm2,xmm5
movdqa xmm1,xmm0
movdqa xmm3,xmm2
...
Run Code Online (Sandbox Code Playgroud)
作者解释说有必要放置align 16,因为我们使用的是 SSE,以便指令本身对齐。没关系。我的问题是为什么作者选择将align 16放在该特定位置。作为程序员,我应该如何决定 …
我已经比较了懒惰堆栈和非惰性堆栈实现:http://en.wikibooks.org/wiki/F_Sharp_Programming/Advanced_Data_Structures#Lazy_Data_Structures
在本文中它说,append函数对于惰性函数是O(1)而对于非惰性函数是O(n).但是在程序下面运行表明,懒惰堆栈的速度是非懒惰堆栈的两倍.可能是什么原因造成的?
type lazyStack<'a> =
| Node of // return an integer exit code
Lazy<'a * 'a lazyStack>
| EmptyStack
module LazyStack =
let (|Consx|Nil|) =
function
| Node(item) ->
let hd, tl = item.Force()
Consx(hd, tl)
| EmptyStack ->
Nil
let hd =
function
| Consx(hd, tl) -> hd
| Nil -> failwith "empty"
let tl =
function
| Consx(hd, tl) -> tl
| Nil -> failwith "empty"
let cons (hd, tl) = Node(lazy (hd, tl)) …Run Code Online (Sandbox Code Playgroud)