我想实现一个类或模式,以确保我从不为一组操作(HTTP调用)一次执行多个任务.任务的调用可以随机地来自不同的线程.我想使用async-await模式,以便调用者可以通过在try-catch中包装调用来处理异常.
以下是预期执行流程的说明:

来自调用者的伪代码:
try {
Task someTask = GetTask();
await SomeScheduler.ThrottledRun(someTask);
}
catch(Exception ex) {
// Handle exception
}
Run Code Online (Sandbox Code Playgroud)
Task这里的类可能是一个Action类,取决于解决方案.
请注意,当我在此问题中使用"Schedule"一词时,我不一定将其与.NET Task Scheduler相关联使用.我不知道async-await库是否足以知道在什么角度以及使用什么工具来解决这个问题.TaskScheduler可能与此相关,也可能不相关.我已经阅读了TAP模式文档并找到了几乎可以解决这个问题的模式,但并不完全(关于交错的章节).
我以前能够通过执行"Discard"功能来撤消SourceTree的更改,该功能在引擎盖下生成此命令:
git -c diff.mnemonicprefix=false -c core.quotepath=false reset -q HEAD -- myproj.csproj
git -c diff.mnemonicprefix=false -c core.quotepath=false checkout HEAD -- myproj.csproj
Run Code Online (Sandbox Code Playgroud)
突然间这不起作用.我做丢弃,没有错误发生,重新审视视图,但文件仍然"修改".然后我尝试在命令行中使用以下相同的结果:
c:\myproject> git reset HEAD
Unstaged changes after reset:
M myproj.csproj
Run Code Online (Sandbox Code Playgroud)
为什么它仍然被列为未分阶段的变化?
我已经验证该文件确实可写(没有进程持有锁)
更新
git checkout 也不起作用:
C:\myproject>git checkout myproj.csproj
C:\myproject>git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: myproj.csproj
# …Run Code Online (Sandbox Code Playgroud) 我想从在Visual Studio 2013中Edit > Navigate To点击时出现的-list中排除代码生成的文件Ctrl+,,因为这些文件永远不会被我手动修改,并且在我想看到它们的内容的极少数情况下,我我将使用解决方案浏览器.有没有办法做到这一点?它们在我的搜索中产生了很多噪音,并大大降低了Navigate to函数的价值.
编辑2016年11月:在VS 2015中添加了插图用于插图.问题仍然存在.第一个搜索命中是-folder中的.g.cs文件obj:
假设(100%假设)我不小心将单元测试项目作为项目类型"类库"添加到VS2010解决方案中.然后我添加了将其作为单元测试项目运行所需的程序集,但是当我点击"在解决方案中运行所有测试"时,MSTest将不会接收它.这里的标准是什么?
我有几个理论,到目前为止都失败了:
任何人?
我已经使用OkHttp库进行了一些性能测试,发现它很棒.它向http://httpbin.org/delay/1提出了80个请求,它在我的HTC One手机上的4.7秒内故意暂停每个请求1秒.我查看了代码,我试图找出它为什么这么快.开发人员(Square Inc)宣传连接池和异步调用,我认为这两者都有助于提高性能.
我来自.NET世界,在.NET 4.5中,您有一个真正的异步HTTP库和Async GetResponse方法.通过在等待响应时将线程交给操作系统,您可以释放资源以启动更多HTTP请求或其他内容.问题是我看不到与OkHttp相同的模式(或者我已经研究过的任何其他Android库).那么我怎么能在4秒内执行80个1秒的请求呢?它不是基于线程的,对吧?我没有开出80(或20)个线程?
具体来说,在com.squareup.okhttp.Call.beginRequest()中,我看到并没有让sendRequest和getResponse调用之间产生线程:
if (canceled) return null;
try {
engine.sendRequest();
if (request.body() != null) {
BufferedSink sink = engine.getBufferedRequestBody();
request.body().writeTo(sink);
}
engine.readResponse();
} catch (IOException e) {
HttpEngine retryEngine = engine.recover(e, null);
if (retryEngine != null) {
engine = retryEngine;
continue;
}
// Give up; recovery is not possible.
throw e;
}
Response response = engine.getResponse();
Run Code Online (Sandbox Code Playgroud)
那么,如何才能实现80个"并行"呼叫?
我不需要知道这个以便使用库,但异步编程让我感兴趣,我真的很想了解OkHttp/SquareInc是如何解决这个问题的.
见下图:

现在Sync(蓝色)和refesh按钮(红色)到底分别做了什么?单击这些时,Idea/Android Studio会发出什么Gradle Tasks和/或其他进程?
我需要用gradle.build文件调试一些错误,并知道这些按钮在这方面对我有什么帮助.
intellij-idea gradle android-studio build.gradle android-gradle-plugin
在"过去的日子"中,构建工具知道它何时具有并且不必通过查看各个源文件的时间戳来重建应用程序.为什么Gradle,用于构建Android应用程序的最现代的工具,在我的情况下使用17秒来做上帝知道什么,在deplyoing和启动自上次构建后没有改变的应用程序?
前8秒似乎用于构建构建脚本("配置")
接下来的9秒用于运行以下任务:
:app:preBuild
:app:preDebugBuild
:app:checkDebugManifest
:app:preReleaseBuild
:library:compileLint
:library:copyReleaseLint UP-TO-DATE
:library:mergeReleaseProguardFiles UP-TO-DATE
:library:preBuild
:library:preReleaseBuild
:library:checkReleaseManifest
:library:preDebugBuild
:library:preDebugTestBuild
:library:prepareComAndroidSupportAppcompatV71910Library UP-TO-DATE
:library:prepareComGoogleAndroidGmsPlayServices3265Library UP-TO-DATE
:library:prepareReleaseDependencies
:library:compileReleaseAidl UP-TO-DATE
:library:compileReleaseRenderscript UP-TO-DATE
:library:generateReleaseBuildConfig UP-TO-DATE
:library:generateReleaseAssets UP-TO-DATE
:library:mergeReleaseAssets
:library:processReleaseManifest UP-TO-DATE
:library:crashlyticsCleanupResourcesRelease
:library:crashlyticsUploadStoredDeobsRelease
:library:crashlyticsGenerateResourcesRelease
:library:generateReleaseResValues UP-TO-DATE
:library:generateReleaseResources UP-TO-DATE
:library:mergeReleaseResources
:library:processReleaseResources
:library:generateReleaseSources
:library:compileReleaseJava UP-TO-DATE
:library:processReleaseJavaRes UP-TO-DATE
:library:packageReleaseJar UP-TO-DATE
:library:compileReleaseNdk UP-TO-DATE
:library:packageReleaseJniLibs UP-TO-DATE
:library:packageReleaseLocalJar UP-TO-DATE
:library:packageReleaseRenderscript UP-TO-DATE
:library:packageReleaseResources
:library:bundleRelease
:app:prepareComAndroidSupportAppcompatV71910Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServices5089Library UP-TO-DATE
:app:prepareComMixpanelAndroidMixpanelAndroid431Library UP-TO-DATE
:app:prepareVGSwipelibraryUnspecifiedLibrary
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets
:app:processDebugManifest UP-TO-DATE
:app:crashlyticsCleanupResourcesDebug
:app:crashlyticsUploadStoredDeobsDebug …Run Code Online (Sandbox Code Playgroud) 我想在用户单击"停止加载"按钮(大多数浏览器中为红色X)或按键盘上的Esc时运行一些Javascript,这通常是相同的.
我在这里看到的问题是通过挂钩来覆盖Esc按钮document.body.onkeyup,但找不到任何覆盖鼠标点击停止按钮的内容.
有没有人完成将Microsoft发布的101 Linq样本翻译成Lambda语法的工作?
如果不是,有没有人知道一个网站用作学习Linq Lambda语法的起点?我喜欢101 Linq样本的格式,所以类似的东西将不胜感激.
当我返回一个常规的int并尝试将该int用作Visibility-annotated int的输入参数时,Android studio会抱怨.如何对我的方法进行注释,以便AS不会产生此警告?我看到View有一个公共@interface"可见性",但由于一些奇怪的原因,android.view.View.Visibility即使它是公开的,我也无法从我的项目中引用.为什么?
我的方法:
public static int booleanToVisibleOrInvisible(boolean visible) {
return visible ? View.VISIBLE : View.INVISIBLE;
}
Run Code Online (Sandbox Code Playgroud)
我需要的:
@android.view.View.Visibility // <- does not compile
public static int booleanToVisibleOrInvisible(boolean visible) {
return visible ? View.VISIBLE : View.INVISIBLE;
}
Run Code Online (Sandbox Code Playgroud) gradle ×2
android ×1
async-await ×1
asynchronous ×1
build.gradle ×1
c#-4.0 ×1
git ×1
java ×1
javascript ×1
lambda ×1
linq ×1
mstest ×1
okhttp ×1