有没有人知道做Task.Factory.StartNewvs new Task后跟调用Start任务之间是否有任何区别.看反射器似乎没有太大的区别.所以也许唯一的区别是Task.Factory.StartNew返回已经启动的任务.它是否正确?
我知道Task.Factory.StartNew并且Task.Run有不同的默认选项,Task.Run是.Net 4.5的首选选项.
有谁知道为什么async不允许方法ref和out参数?我已经做了一些或研究它,但我唯一能找到的是它与堆栈展开有关.
有没有人遇到使用场景ConfigureAwait(true)?由于true是默认选项,我无法看到你什么时候使用它.
我只是在尝试看待Task等待冷任务(即尚未启动的)时会发生什么.令我惊讶的是,代码只是永远挂起而且"Finsihed "从未打印过.我希望抛出异常.
public async Task Test1()
{
var task = new Task(() => Thread.Sleep(1000));
//task.Start();
await task;
}
void Main()
{
Test1().Wait();
Console.WriteLine("Finished");
}
Run Code Online (Sandbox Code Playgroud)
然后我或许可以从另一个线程启动任务,所以我将代码更改为:
public async Task Test1()
{
var task = new Task(() => Thread.Sleep(1000));
//task.Start();
await task;
Console.WriteLine("Test1 Finished");
}
void Main()
{
var task1 = Test1();
Task.Run(() =>
{
Task.Delay(5000);
task1.Start();
});
task1.Wait();
Console.WriteLine("Finished");
}
Run Code Online (Sandbox Code Playgroud)
但它仍被阻止task1.Wait().有人知道在等待之后是否有办法开始冷却任务?
否则似乎没有必要能够执行await冷任务,所以也许任务应该在等待时启动或者应该抛出异常.
更新
我正在等待错误的任务,即返回的外部任务Test1而不是其中的新任务.@Jon Skeet提到的InvalidOperationException被抛入其中,Task.Run但是因为没有观察到生成的任务,所以主线程上没有抛出异常.将try/catch内部Task.Run或调用Wait() …
我一直在做一些调查,以确切了解Monitor.Enter如何在内部工作.我查看了代码,似乎进入的实际机制是在外部函数中:
[System.Security.SecuritySafeCritical]
[ResourceExposure(ResourceScope.None)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private static extern void ReliableEnterTimeout(Object obj, int timeout, ref bool lockTaken);
Run Code Online (Sandbox Code Playgroud)
有谁知道这个函数做什么或Monitor.Enter的一般机制是什么?它是如何知道哪些对象被锁定的?
我问一个问题前面关于沿着图形聚集量.提供的两个答案运作良好,但现在我正在尝试将Cypher查询扩展到可变深度的图表.
总结一下,我们从一堆叶子商店开始,这些叶子商店都与特定供应商相关联,这是Store节点上的一个属性.然后将库存移至其他商店,每个供应商的比例对应于他们对原始商店的贡献.
所以对于节点B02,S2贡献750/1250 = 60%和S3贡献40%.然后,我们600台我们对B02其中60%属于S2与40%对S3等.

我们想知道最终700个单位的百分比D01属于每个供应商.供应商名称相同的供应商.因此,对于上图,我们期望:
S1,38.09
S2,27.61
S3,34.28
我使用这个Cypher脚本编写了一个图表:
CREATE (A01:Store {Name: 'A01', Supplier: 'S1'})
CREATE (A02:Store {Name: 'A02', Supplier: 'S1'})
CREATE (A03:Store {Name: 'A03', Supplier: 'S2'})
CREATE (A04:Store {Name: 'A04', Supplier: 'S3'})
CREATE (A05:Store {Name: 'A05', Supplier: 'S1'})
CREATE (A06:Store {Name: 'A06', Supplier: 'S1'})
CREATE (A07:Store {Name: 'A07', Supplier: 'S2'})
CREATE (A08:Store …Run Code Online (Sandbox Code Playgroud) 我有一系列的股票报价,我想在过去一小时内获取所有数据并对其进行一些处理.我试图用反应式扩展2.0实现这一点.我在另一篇文章中读到使用Interval,但我认为这已被弃用.
我一直在阅读,async/await并试图通过调用WebClient.DownloadStringTaskAsyncUI线程然后task.Result在任务执行时调用UI线程来重现Windows窗体中的死锁场景.这导致了僵局.
然后我尝试通过调用ConfigureAwait(false)返回的任务来解决这个问题,但令我惊讶的是仍然造成了死锁.我的理解是它应该在不同的线程上执行方法的延续,因此不应该有死锁.我错过了什么?
我知道如何解决这个问题,但是思想ConfigureAwait(false)也会解决它.
这是代码,我使用的是.NET 4.5
private async void button1_Click(object sender, EventArgs e)
{
// Deadlocks!
Task<string> task = DownloadAsync();
textBox1.Text = task.Result;
// Works
//textBox1.Text = await DownloadAsync();
}
private static async Task<string> DownloadAsync()
{
var client = new WebClient();
string result = await client.DownloadStringTaskAsync("http://www.rpmglobal.com").ConfigureAwait(false);
return result;
}
Run Code Online (Sandbox Code Playgroud) 有没有Kotlin相当于C#的任务.什么时候?
我想出了下面的代码,但我想知道是否可以编写whenAll它只能暂停一次.
fun main(args: Array<String>) = runBlocking {
println("Start")
val serviceA = KotlinServiceA()
val serviceB = KotlinServiceB()
val deferredA = async(CommonPool) { serviceA.operationA() }
val deferredB = async(CommonPool) { serviceB.operationB() }
var tasks = arrayOf(deferredA, deferredB)
tasks.whenAll()
println("End")
}
suspend fun Array<Deferred<Unit>>.whenAll() : Unit {
for (task in this) {
task.await()
}
}
Run Code Online (Sandbox Code Playgroud) 当我查看一些c#代码时,我发现了一个新的类声明,它传递了一个方法作为构造函数的参数.这是我第一次看到这样的东西,对我来说没什么意义.虽然整个应用程序工作正常我我仍然有兴趣知道幕后的主要想法是什么.
var c = new List<TheClass>
{
new TheClass(TheMethod);
}
private void TheMethod()
{
//do somthing
}
Run Code Online (Sandbox Code Playgroud) c# ×8
asynchronous ×5
async-await ×2
c#-4.0 ×1
constructor ×1
coroutine ×1
cypher ×1
kotlin ×1
locking ×1
neo4j ×1
recursion ×1