因此,显然.NET的全新ValueTask<T>
是Task<T>
的精简版版本。太酷了,但是如果在不得不使用Async.AwaitTask
将F#异步工作流与Task集成之前,我现在应该对ValueTask做什么?
答案 0 :(得分:2)
在实现Async.AwaitValueTask
之前(感谢Aaron),可以使用ValueTask的AsTask方法,现在使用Async.AwaitTask
作为最简单的解决方案。
答案 1 :(得分:0)
我的 OSS 项目 "FusionTasks" 可以自然地和隐式地处理 //How you use it in more than one function Define it as a global var
let incorrects, correct;
function Q1correct() {
correct.style.backgroundColor = 'green';
document.querySelector('#resultQ1').innerHTML = 'Correct!';
}
function Q1wrong() {
for (let i = 0; i < incorrects.length; i++) {
incorrects[i].style.backgroundColor = 'red';
document.querySelector('#resultQ1').innerHTML = 'Wrong :(';
}
}
function Q2() {
if (secondQ.value.toLowerCase() == "yes") {
secondQ.style.backgroundColor = 'green';
document.querySelector('#resultQ2').innerHTML = 'Correct!';
}
else {
secondQ.style.backgroundColor = 'red';
document.querySelector('#resultQ2').innerHTML = 'Wrong :(';
}
}
document.addEventListener('DOMContentLoaded', function () {
correct = document.querySelector('.correct');
correct.addEventListener('click', Q1correct);
//querySelectorAll returns an array, so we need to loop into it
incorrects = document.querySelectorAll('.incorrect');
incorrects.forEach(btn => {
btn.addEventListener('click', Q1wrong)
})
let secondQ = document.querySelector('#check');
secondQ.addEventListener('click', Q2);
});
和 Task
与 F# 异步工作流中的 F# ValueTask
类型相同:
Async