我在我的应用程序中使用任务并行库.我有一个任务(让我们称之为"DoSomething")可能被取消.无论任务是故障,取消还是成功完成,我都会继续执行该任务,执行一些清理工作.
在启动此任务的代码中,我想返回一个Task对象,其状态(出错,取消,运行完成)反映了DoSomething任务的状态,但重要的是我返回的这个任务不会反映这个状态,直到继续任务执行.
这是一个例子:
public Task Start(CancellationToken token)
{
var doSomethingTask = Task.Factory.StartNew(DoSomething
, token);
var continuationTask = doSomethingTask.ContinueWith
(
(antecedent) =>
{
if (antecedent.IsFaulted || antecedent.IsCanceled)
{
//Do failure-specific cleanup
}
//Do general cleanup without regard to failure or success
}
);
//TODO: How do I return a Task obj which Status reflect the status of doSomethingTask,
//but will not transition to that status until continuationTask completes?
}
Run Code Online (Sandbox Code Playgroud)
我可以使用TaskCompletionSource,但这看起来很糟糕.还有其他想法吗?
好吧,尝试构建一个单独的查询来节省我自己一大堆时间(而不是写大量的单独查询),但我甚至不知道如何开始这个.
我需要的是single day and type在上午8:00到晚上8:00之间按小时查看和分析行动计数.所以例如我有以下假表
TYPE_ ACTION_ TIMESTAMP_
------------------------------
A processed 2010-11-19 10:00:00.000
A processed 2010-11-19 10:46:45.000
A processed 2010-11-19 11:46:45.000
A processed 2010-11-19 12:46:45.000
A processed 2010-11-19 12:48:45.000
A pending 2010-11-19 11:46:45.000
A pending 2010-11-19 11:50:45.000
A pending 2010-11-19 12:46:45.000
A pending 2010-11-19 12:48:45.000
B pending 2010-11-19 19:48:45.000
B pending 2010-11-19 21:46:45.000
.etc
Run Code Online (Sandbox Code Playgroud)
所以,如果我想查看所有记录
我会看到这个结果
ACTION_ NUMOCCURENCES RANGE
---------------------------------------------
processed 2 10:00:00 - 11:00:00
pending 0 10:00:00 - 11:00:00
processed 1 11:00:00 - …Run Code Online (Sandbox Code Playgroud) 我目前正在进行一个项目,并希望在代码中实现某种软件跟踪.理想情况下,它的推出频率.它运行了多长时间,功能跟踪等.我已经将Exceptioneer用于未处理的异常,但是想要使用类似的用法跟踪.
这些数据应该都是匿名的,理想情况下由其他人作为服务运行.我想让用户选择将其关闭,如果他们希望...那么,这是我应该实现的东西,还是有第三方做那种事情?我知道它可能是一个粘性区域,但我已经看到有关iPhone应用程序使用情况的统计数据.他们这样做,为什么我们不能?(如果用户同意,当然)
[更新]根据评论,我应该更清楚.这是一个Winforms .NET 4.应用程序,虽然我想稍后用WCF更新它.我只会跟踪我自己的应用程序,虽然我也想知道有关环境的小信息(Windows操作系统版本,SP,也许proc和ram ......)
我找到了一本书,指出如果你想使用C标准库中的函数,它将函数指针作为参数(例如qsort),你想要传递函数指针的函数需要是一个C函数因此声明为extern"C".
例如
extern "C" {
int foo(void const* a, void const* b) {...}
}
...
qsort(some_array, some_num, some_size, &foo);
Run Code Online (Sandbox Code Playgroud)
如果这只是错误的信息,我不会感到惊讶,但是 - 我不确定,所以:这是正确的吗?
Lua没有为OO构建支持,但它允许您自己构建它.你能否分享一些可以实现OO的方法?
请为每个答案写一个例子.如果您有更多示例,请发布另一个答案.
有没有办法实现一种类型的引用,其值可以与另一个原子交换?
在Java中,我们AtomicReference可以使用本地变量而不是其他变量进行交换AtomicReference.
你可以做:
AtomicReference r1 = new AtomicReference("hello");
AtomicReference r2 = new AtomicReference("world");
Run Code Online (Sandbox Code Playgroud)
并将它们与两个操作组合交换:
r1.set(r2.getAndSet(r1.get()));
Run Code Online (Sandbox Code Playgroud)
但是这使得它们之间处于不一致状态,两者都包含在内"hello".即使你可以原子地交换它们,你仍然无法原子地读取它们(作为一对).
我希望能做的是:
PairableAtomicReference r1 = new PairableAtomicReference("hello");
PairableAtomicReference r2 = new PairableAtomicReference("world");
AtomicRefPair rp = new AtomicRefPair(r1, r2);
Run Code Online (Sandbox Code Playgroud)
然后
Object[] oldVal, newVal;
do {
oldVal = rp.get();
newVal = new Object[] {oldVal[1], oldVal[0]};
} while (! rp.compareAndSet(oldVal, newVal));
Run Code Online (Sandbox Code Playgroud)
交换值,并在另一个线程中:
AtomicRefPair otherRP = new AtomicRefPair(r1, r2);
System.out.println(Arrays.toString(otherRP.get()));
Run Code Online (Sandbox Code Playgroud)
并确保输出将是[hello, world]或[world, hello].
笔记:
r1并且r2为此操作配对,但是另一个线程可能会独立配对,说r1 …我试图制作一个按钮,退出我的应用程序,并打开我的应用程序配置文件的Facebook应用程序(如果可用).我无法弄清楚我将如何做到这一点.
我的插件需要能够写入文件系统.是否可以查询已知文件的写入权限?
例如,我的wordpress主题附带了一个名为custom.css的文件,我需要对其进行写访问.当我的主题首次加载时,我想查询此脚本以查看其是否可写,然后将结果回显给我的主题.
然后在支持会话中,我可以要求用户直观地检查此设置以确保我具有预期的写入权限(并将其作为读/写问题的原因消除).
要开始,并定义guid,我使用.net框架Guid这有点假设情况用户在执行特定操作时会生成guid.每个用户都可以看到自己的guid.如果用户要知道另一个用户的guid之一,则会出现安全性损害.
如果我们认为用户无法窃取另一个用户的guid并且只能猜测它,那么这个系统的安全性如何?
我明白盲目猜测guid是不可能的.即使他们有一百万个成功价值,他们仍然只有10 ^ 20的成功猜测机会
我害怕可能存在的问题是指导预测.用户是否可以生成大量请求,查看他获得的guid,并且知道.net guid生成公式可以大大提高他猜测的几率?这些几率可以降低到安全问题吗?在这种情况下,如何以一种独特的不可猜测的方式生成密钥?
我问任何提到猜测/碰撞几率的人都会增加一些难以理解的含义.要么是用于定义赔率的确切数字,要么是"它可以用于存储帐户数据,而不是用于存储敏感数据"
编辑
这个问题似乎很好地进入了我最初想要探索的领域这个问题 GUID是(临时)加密的一个好关键吗?
我尝试使用XSLT转换XML文档.作为输入,我有www.wordpress.org XHTML源代码,而XSLT是虚拟示例检索站点的标题(实际上它什么都不做 - 它不会改变任何东西).
我使用的每个API或库,转换大约需要2分钟!如果你看看wordpress.org源代码,你会发现它只有183行代码.正如我用Google搜索,这可能是由于DOM树的构建.无论XSLT多么简单,它总是2分钟 - 所以它确认它与DOM构建有关,但无论如何它不应该花2分钟.
这是一个示例代码(没什么特别的):
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = null;
try {
transformer = tFactory.newTransformer(
new StreamSource("/home/pd/XSLT/transf.xslt"));
} catch (TransformerConfigurationException e) {
e.printStackTrace();
}
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
System.out.println("START");
try {
transformer.transform(new SAXSource(new InputSource(
new FileInputStream("/home/pd/XSLT/wordpress.xml"))),
new StreamResult(outputStream));
} catch (TransformerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("STOP");
System.out.println(new String(outputStream.toByteArray()));
Run Code Online (Sandbox Code Playgroud)
它位于START和STOP之间,其中java"暂停"2分钟.如果我查看处理器或内存使用情况,则不会增加任何内容.它看起来真的是JVM停止了......
您是否有任何转换长度超过50的XML(这是随机数;))的经验?当我读到XSLT时,总是需要构建DOM树才能完成它的工作.快速转型对我来说至关重要.
提前谢谢,Piotr