我想知道是否使用更好的做法:
var a = b.Substring(6);
Run Code Online (Sandbox Code Playgroud)
要么
var a = b.Remove(0,6);
Run Code Online (Sandbox Code Playgroud)
哪一个效率更高/更快?显然,子字符串有更多选项可供您选择,但Remove()无法做到。.很抱歉,如果这是新手问题,我对C#还是陌生的
我有以下代码:
using (var cancelSource = new CancellationTokenSource())
{
Task[] tasks = null;
var cancelToken = cancelSource.Token;
tasks = new[]
{
Task.Run(async () => await ThrowAfterAsync("C", cancelToken, 1000)) //<---
};
await Task.Delay(howLongSecs * 1000); // <---
cancelSource.Cancel();
await Task.WhenAll(tasks);
}
Run Code Online (Sandbox Code Playgroud)
哪里ThrowAfterAsync有这样的:
private async Task ThrowAfterAsync(string taskId, CancellationToken cancelToken, int afterMs)
{
await Task.Delay(afterMs, cancelToken);
var msg = $"{taskId} throwing after {afterMs}ms";
Console.WriteLine(msg);
throw new ApplicationException(msg);
}
Run Code Online (Sandbox Code Playgroud)
Resharper建议我可以使用Task.Run()带有取消令牌的重载,如下所示:
Task.Run(async () => await ThrowAfterAsync("C", cancelToken, 1000), cancelToken)
Run Code Online (Sandbox Code Playgroud)
但为什么 ?在没有取消令牌作为参数的情况下,在第一个版本上执行此操作有什么好处?