「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part127 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1489498042/
■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1492843013/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
ふらっと C#,C♯,C#(初心者用) Part128 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2017/05/02(火) 22:05:40.13ID:OPFlvhxj553デフォルトの名無しさん
2017/05/26(金) 22:40:09.73ID:6mvWqLXP >>549
スレのルールすら守れない子供は余所に行こうね
スレのルールすら守れない子供は余所に行こうね
554デフォルトの名無しさん
2017/05/26(金) 23:13:53.33ID:6Pwsd9SO >>552
昔作ったから
昔作ったから
555デフォルトの名無しさん
2017/05/27(土) 01:19:14.36ID:rsPE4izq 使用しているapiをすべて記録してあればバージョンアップ時に楽なのかもな
556デフォルトの名無しさん
2017/05/27(土) 08:05:10.08ID:2waTjXRv 記録しても変更できないんじゃ意味ないよ
変更を容易にするために日頃からリファクタリングをすること
これが唯一の正解なんだよ
塩漬けは最もやってはいけない行為
変更を容易にするために日頃からリファクタリングをすること
これが唯一の正解なんだよ
塩漬けは最もやってはいけない行為
557デフォルトの名無しさん
2017/05/27(土) 08:13:13.30ID:MuqnBgBV558デフォルトの名無しさん
2017/05/27(土) 09:01:34.21ID:SDTaiU/Z async await つかってますか
559デフォルトの名無しさん
2017/05/27(土) 09:54:28.11ID:2waTjXRv Taskをラップした方がわかりやすいし他の言語にも移植しやすい
560デフォルトの名無しさん
2017/05/27(土) 09:58:59.18ID:dfyKY7Wk UWPに至っては、半ば強制的にasync await使わされます
ライブラリがそれ前提で作られているからね
ライブラリがそれ前提で作られているからね
561デフォルトの名無しさん
2017/05/27(土) 10:24:26.01ID:reRwAhMh 今時PythonやJavaScriptにもasyncがあるのに何を言っているのか
なんだかんだC#のやり方は正しくて他の言語もすぐに追従する
なんだかんだC#のやり方は正しくて他の言語もすぐに追従する
562デフォルトの名無しさん
2017/05/27(土) 10:25:05.62ID:IYBRhAj3 使いはするけど仕組みはよくわかってない人が多いんじゃないかな
実際はreturnしてるけどそういう風には見えない
実際はreturnしてるけどそういう風には見えない
563デフォルトの名無しさん
2017/05/27(土) 10:36:00.65ID:IYBRhAj3 async awaitの説明サイトがあんまり初心者もは優しくないんだよな
どれもいまいちというか
何故かTaskの説明ばかり
重要な事にはほとんど触れてない
どれもいまいちというか
何故かTaskの説明ばかり
重要な事にはほとんど触れてない
564デフォルトの名無しさん
2017/05/27(土) 10:39:17.27ID:8fRknhmf C#は突出して新しいことをやっているわけではないが
まだマイナーだけど光るものを見つけてきてメインストリームに持ってくるときの
取捨選択とデザインのセンスが神がかっているという印象
まだマイナーだけど光るものを見つけてきてメインストリームに持ってくるときの
取捨選択とデザインのセンスが神がかっているという印象
565デフォルトの名無しさん
2017/05/27(土) 10:45:11.69ID:2waTjXRv >>561
Java
Java
566デフォルトの名無しさん
2017/05/27(土) 13:41:30.68ID:p4c408zN >>563
非同期(スレッド)を理解せずに非同期メソッドが使えるはずがなく、
そもそも非同期自体が初心者が気軽に使えるような機能じゃないんだから当たり前だw
っていうか、@ITの記事はちょっと説明が足りない部分はあるけどよく書けてるでしょ
あれで何が不満なんだ?
非同期(スレッド)を理解せずに非同期メソッドが使えるはずがなく、
そもそも非同期自体が初心者が気軽に使えるような機能じゃないんだから当たり前だw
っていうか、@ITの記事はちょっと説明が足りない部分はあるけどよく書けてるでしょ
あれで何が不満なんだ?
567デフォルトの名無しさん
2017/05/27(土) 13:59:40.73ID:gzircrhE C#でintの配列を保存したファイルを読み込んでint配列に設定したいんですが
まずbyte[]に読み込んでそれを変換するという形になりますか?
一番効率の良い方法ってどんなでしょうか?
System.IO.FileStream fs = System.IO.File.OpenRead(path);
byte[] b = new [4*32];
fs.Read(b, 0, 4*32);
fs.Close();
int[] = n = new [32];
コピーはひとつずつする以外にどういうやり方があるでしょうか?
まずbyte[]に読み込んでそれを変換するという形になりますか?
一番効率の良い方法ってどんなでしょうか?
System.IO.FileStream fs = System.IO.File.OpenRead(path);
byte[] b = new [4*32];
fs.Read(b, 0, 4*32);
fs.Close();
int[] = n = new [32];
コピーはひとつずつする以外にどういうやり方があるでしょうか?
568デフォルトの名無しさん
2017/05/27(土) 14:10:30.20ID:VKoRAsZa >>567
var buffer = new int[ 32 ];
using( var fs = File.OpenStream( path ) )
using( var reader = new BinaryReader( fs, Encoding.Ascii, true ) )
{
for ( int i = 0; i < buffer.Length; ++i )
{
buffer[ i ] = reader.ReadInt32();
}
}
var buffer = new int[ 32 ];
using( var fs = File.OpenStream( path ) )
using( var reader = new BinaryReader( fs, Encoding.Ascii, true ) )
{
for ( int i = 0; i < buffer.Length; ++i )
{
buffer[ i ] = reader.ReadInt32();
}
}
569デフォルトの名無しさん
2017/05/27(土) 14:34:06.49ID:gzircrhE >>568
そういう読み込み方があるんですね。ありがとうございます。
そういう読み込み方があるんですね。ありがとうございます。
570デフォルトの名無しさん
2017/05/27(土) 14:51:03.74ID:djXMvCo4 >>567
一番効率が良いというとやはりポインタにしてC++で言う所のreinterpret_castだけど
C#ではunsafeになり非推奨なので、基本形は>>568のようなBinaryReader/Writerになると思う
汎用的な所だとバイト配列と数値型の変換を行うBitConverter、IntPtrを介して遣り取りするMarshal.Copy
UnmanagedMemoryAccessorのバックエンドとなるSafeBuffer(ジェネリック及び構造体配列が指定可能)など
うちSafeBufferは抽象クラスなので http://ideone.com/P6ZpjV みたいな実装を自前で書く必要あり
一番効率が良いというとやはりポインタにしてC++で言う所のreinterpret_castだけど
C#ではunsafeになり非推奨なので、基本形は>>568のようなBinaryReader/Writerになると思う
汎用的な所だとバイト配列と数値型の変換を行うBitConverter、IntPtrを介して遣り取りするMarshal.Copy
UnmanagedMemoryAccessorのバックエンドとなるSafeBuffer(ジェネリック及び構造体配列が指定可能)など
うちSafeBufferは抽象クラスなので http://ideone.com/P6ZpjV みたいな実装を自前で書く必要あり
571570
2017/05/27(土) 15:29:18.13ID:djXMvCo4 1つ忘れてた、Buffer.BlockCopyでバッファ自体をコピー可能、プリミティブ配列同士ならこれが最もシンプルだったような
Stream.Readの一部実装はArrayなら何でも読み込めた気がするけど、無理矢理渡す方法がアレなので…
あとSafeBufferの配列読み書きはMarshal.AlignedSizeOf<T>(内部メソッド)のバイトサイズでアライメントされる
Stream.Readの一部実装はArrayなら何でも読み込めた気がするけど、無理矢理渡す方法がアレなので…
あとSafeBufferの配列読み書きはMarshal.AlignedSizeOf<T>(内部メソッド)のバイトサイズでアライメントされる
572デフォルトの名無しさん
2017/05/27(土) 15:40:23.00ID:IYBRhAj3 ポインタ操作ってリトルエンディアンは保証されてるのか?
573デフォルトの名無しさん
2017/05/27(土) 16:00:40.64ID:5EjoFYzo574デフォルトの名無しさん
2017/05/27(土) 17:01:09.52ID:uuvh7wIS 質問の主語がわからんが、int配列のデータをWriteして、1バイトづつReadしたら、もちろん逆になってるよ
575デフォルトの名無しさん
2017/05/27(土) 17:45:11.27ID:gIqbrIjJ 環境依存じゃないかって言ってるならたぶん理念的には環境依存なんだろうね
68kみたいにビッグエンディアンのC#の動作環境があったとしたら、
その環境ではbyte[]を*intで正常に読めないと思う
68kみたいにビッグエンディアンのC#の動作環境があったとしたら、
その環境ではbyte[]を*intで正常に読めないと思う
576デフォルトの名無しさん
2017/05/27(土) 18:16:22.09ID:dfyKY7Wk まあファイルI/Oはメモリー操作に比べると思いっきり遅いから
何やっても大して早くならんけどね
何やっても大して早くならんけどね
577デフォルトの名無しさん
2017/05/27(土) 18:26:00.76ID:eydHjhDC 話題とは関係ないけどこれC#にあったっけ?
>File.OpenStream
>File.OpenStream
578デフォルトの名無しさん
2017/05/27(土) 18:27:21.11ID:gIqbrIjJ >>576
だからこそパフォーマンスが必要なら1つずつチビチビじゃなくて一度になるべくまとめて読み書きするんですよw
だからこそパフォーマンスが必要なら1つずつチビチビじゃなくて一度になるべくまとめて読み書きするんですよw
579デフォルトの名無しさん
2017/05/27(土) 18:32:14.66ID:S8Hvv/fS >>578
基本的なことだけど、バッファがあるからアプリケーションレベルで小細工する必要はないよ
基本的なことだけど、バッファがあるからアプリケーションレベルで小細工する必要はないよ
580デフォルトの名無しさん
2017/05/27(土) 19:01:40.80ID:gIqbrIjJ >>579
Windowsのアーキテクチャーに詳しいわけじゃないけど、
書き込みは確かにディスクキャッシュにバッファリングされるから
プログラム側でまとめて書いても効果薄いかもしれないけど、
読み出し時にはHWレベルでもOSレベルでも大きなキャッシュなんか
用意してないはずだから、プログラム側でまとめて読む意味はあると思うよ
Windowsのアーキテクチャーに詳しいわけじゃないけど、
書き込みは確かにディスクキャッシュにバッファリングされるから
プログラム側でまとめて書いても効果薄いかもしれないけど、
読み出し時にはHWレベルでもOSレベルでも大きなキャッシュなんか
用意してないはずだから、プログラム側でまとめて読む意味はあると思うよ
581デフォルトの名無しさん
2017/05/27(土) 19:10:38.40ID:nge3QdkF >>577
Java と勘違いしてるか IO.FileStream( ) 辺りと混同してるんでしょ
Java と勘違いしてるか IO.FileStream( ) 辺りと混同してるんでしょ
582デフォルトの名無しさん
2017/05/27(土) 19:12:01.62ID:nge3QdkF >>579-580
それ以前にメソッド呼び出しだってコストはかかるわけで
それ以前にメソッド呼び出しだってコストはかかるわけで
583デフォルトの名無しさん
2017/05/27(土) 19:22:03.52ID:PYJf2o92 >>567
なんでそんな事したいのか言えよ
なんでそんな事したいのか言えよ
584デフォルトの名無しさん
2017/05/27(土) 19:29:20.90ID:VKoRAsZa585デフォルトの名無しさん
2017/05/27(土) 20:12:08.55ID:VKoRAsZa >>580
検証したことないけど、FileOptions.SequentialScan指定してFileStreamを作成したらprefetch効かないかな。
検証したことないけど、FileOptions.SequentialScan指定してFileStreamを作成したらprefetch効かないかな。
586デフォルトの名無しさん
2017/05/27(土) 20:52:47.13ID:dfyKY7Wk >>580
ディスクの読み書きってさ、最小限でもセクターって単位で処理するんだが今のWindows10だと4096バイト有るんだわ
だから1バイト読んでもメモリーには最小でも4096バイト入るわけだね
ディスクの読み書きってさ、最小限でもセクターって単位で処理するんだが今のWindows10だと4096バイト有るんだわ
だから1バイト読んでもメモリーには最小でも4096バイト入るわけだね
587デフォルトの名無しさん
2017/05/27(土) 20:59:07.50ID:gIqbrIjJ >>586
HDDの物理層の知識はゼロだけど、セクターってのはファイルシステム上の概念であって
最小の読み出し単位じゃないと思うよw
SSDみたいなフラッシュメモリーには最小の書き換え単位が存在するけど
最小の読み出し単位は存在しない
HDDの物理層の知識はゼロだけど、セクターってのはファイルシステム上の概念であって
最小の読み出し単位じゃないと思うよw
SSDみたいなフラッシュメモリーには最小の書き換え単位が存在するけど
最小の読み出し単位は存在しない
588デフォルトの名無しさん
2017/05/27(土) 21:03:14.20ID:WiwmRK76 物理層も高速化のためにセクタ単位で読んでるはずよ
ファイルシステムより低位の概念
ファイルシステムより低位の概念
590デフォルトの名無しさん
2017/05/27(土) 21:12:40.87ID:dfyKY7Wk >>587
ディスクってさ、回転するからそれとシンクロして読まないと一周待たないといけなくなるんだよね
だからディスクは決まったバイト数をシーケンシャルに読むのが当たり前なんです
で。その最小単位をセクターと呼んでwindows10だと4096バイト有る
SSDはそんなこと無いけど、HDDと同じ振る舞いで動くようにセクタ管理しています
ディスクってさ、回転するからそれとシンクロして読まないと一周待たないといけなくなるんだよね
だからディスクは決まったバイト数をシーケンシャルに読むのが当たり前なんです
で。その最小単位をセクターと呼んでwindows10だと4096バイト有る
SSDはそんなこと無いけど、HDDと同じ振る舞いで動くようにセクタ管理しています
591デフォルトの名無しさん
2017/05/27(土) 21:14:04.21ID:WiwmRK76 Windows10だからというよりHDDが新しいからだと思われ
592デフォルトの名無しさん
2017/05/27(土) 21:19:00.20ID:dfyKY7Wk >>591
7かVistaあたりで2Tの壁が取っ払われた時セクササイズが変わったようだ(前は512)
7かVistaあたりで2Tの壁が取っ払われた時セクササイズが変わったようだ(前は512)
593デフォルトの名無しさん
2017/05/27(土) 21:20:55.03ID:nge3QdkF 定義は色々違うけど概ね
セクター ... 物理的に読み書きできる単位
ブロック... 論理的に読み書きできる単位
クラスタ ... ファイルシステムの割り当て単位
って言う場合が多い
なお HDD でも1バイトだけ読み出したり書き換えたりはできない
必ずセクター単位の読み書きになる
セクター ... 物理的に読み書きできる単位
ブロック... 論理的に読み書きできる単位
クラスタ ... ファイルシステムの割り当て単位
って言う場合が多い
なお HDD でも1バイトだけ読み出したり書き換えたりはできない
必ずセクター単位の読み書きになる
594デフォルトの名無しさん
2017/05/27(土) 21:27:42.99ID:sdz07quX595デフォルトの名無しさん
2017/05/28(日) 00:11:01.44ID:HK/67GFs 今時OSどころかBIOSでさえ、ディスクの物理的なセクターとか管理できてないけどな
596デフォルトの名無しさん
2017/05/28(日) 12:23:16.31ID:2K8JxE4j UDPでデータをBeginiReceiveで非同期受信したらToastで受信文字列を表示させたいんだが、以下みたいなバックグラウンドスレッドからGUI操作はできませんみたいなのがでる
Java.Lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
これ対処どうしたらいいかな
Javaのやり方は見つけたけど、Xamarinだとどうしたらいいかいまいちわからん「
Java.Lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
これ対処どうしたらいいかな
Javaのやり方は見つけたけど、Xamarinだとどうしたらいいかいまいちわからん「
597デフォルトの名無しさん
2017/05/28(日) 12:33:51.75ID:X8MhB+Ic xamarinスレがあるのに何でここで聞くの?
598デフォルトの名無しさん
2017/05/28(日) 12:38:59.53ID:2K8JxE4j あ、ごめんw
Xamarinスレと思って素で間違えた
失礼しました
ちなみにSynchronizationContext使ったら解決しました
Xamarinスレと思って素で間違えた
失礼しました
ちなみにSynchronizationContext使ったら解決しました
599デフォルトの名無しさん
2017/05/28(日) 20:16:37.95ID:dc5zy2FD ブラウザコントロールを使ったアプリを作りたいんですが、
WinFFormsでもWPFでも、webサイトを開くと、ブラウザが古いって言われてマトモに表示できません。
新しいブラウザコントロールはどうやって使用したらいいでしょうか?
WinFFormsでもWPFでも、webサイトを開くと、ブラウザが古いって言われてマトモに表示できません。
新しいブラウザコントロールはどうやって使用したらいいでしょうか?
600デフォルトの名無しさん
2017/05/28(日) 20:18:18.68ID:BVKFrymy ブラウザ普通に使えばいいじゃん
601デフォルトの名無しさん
2017/05/28(日) 20:24:15.70ID:LqX4nhhl Electronにでも乗り換えてiframeでいいよ
602デフォルトの名無しさん
2017/05/28(日) 20:38:08.43ID:X8MhB+Ic >>599
「c# ie バージョン」でググれば解決策出る
「c# ie バージョン」でググれば解決策出る
603デフォルトの名無しさん
2017/05/28(日) 20:54:57.63ID:Q4IaIxAm604デフォルトの名無しさん
2017/05/28(日) 20:57:31.19ID:OzzF/wdK >>602
599じゃないけど幸せになれた
599じゃないけど幸せになれた
605デフォルトの名無しさん
2017/05/28(日) 21:52:44.46ID:9tRj7diM WPFのデータバインディングって速度速かったりするん?
コントロールとDBをリンク出来るような感じって思って良いんだよね?
コントロールとDBをリンク出来るような感じって思って良いんだよね?
606デフォルトの名無しさん
2017/05/28(日) 22:14:28.21ID:kC4qoZB1 >>605
件数と使う「Control」によるらしい
件数と使う「Control」によるらしい
607デフォルトの名無しさん
2017/05/28(日) 22:17:03.35ID:9tRj7diM608デフォルトの名無しさん
2017/05/28(日) 22:32:41.86ID:WRn0Vp2w データバインディングの動きを理解してない以上
手を出さねーほうが無難じゃね〜の?
手を出さねーほうが無難じゃね〜の?
609デフォルトの名無しさん
2017/05/28(日) 22:59:20.62ID:kC4qoZB1 >>607
一万件程度なら楽勝かと
一万件程度なら楽勝かと
610デフォルトの名無しさん
2017/05/29(月) 06:23:33.57ID:KA+g5PFR $$$4.3$$$
"V"="1.3335412","0","1","3Q",
"V"="1.3335412","0","1","3Q",
611デフォルトの名無しさん
2017/05/29(月) 16:23:55.26ID:NQQqCKG9 ↓このような処理があった時にbutton1を押して無限ループのタスクを実行した後に
button2のクリックイベントからtaskを止める方法ってありますでしょうか?どなたか教えてください
Task task;
private async void button1_Click(object sender, EventArgs e)
{
task = doTask();
}
private async Task doTask()
{
await Task.Run(() =>
{
while (true)
{
// 無限ループ
}
}
}
private async void button2_Click(object sender, EventArgs e)
{
// ここでtaskを止めたい
}
button2のクリックイベントからtaskを止める方法ってありますでしょうか?どなたか教えてください
Task task;
private async void button1_Click(object sender, EventArgs e)
{
task = doTask();
}
private async Task doTask()
{
await Task.Run(() =>
{
while (true)
{
// 無限ループ
}
}
}
private async void button2_Click(object sender, EventArgs e)
{
// ここでtaskを止めたい
}
612デフォルトの名無しさん
2017/05/29(月) 16:29:32.48ID:lQKC7nKu613デフォルトの名無しさん
2017/05/29(月) 16:38:30.94ID:KWmGTlOy614デフォルトの名無しさん
2017/05/29(月) 16:57:00.21ID:XexF9nJM >>611
こういう場合、無限ループの中でどんな処理を行う予定なの?
こういう場合、無限ループの中でどんな処理を行う予定なの?
615デフォルトの名無しさん
2017/05/29(月) 17:10:58.74ID:pjx27QrG >>611
外側から強制的に止めたいとか思ってるならその発想は危険な考え違い
外側から強制的に止めたいとか思ってるならその発想は危険な考え違い
616デフォルトの名無しさん
2017/05/29(月) 17:31:52.87ID:NQQqCKG9617デフォルトの名無しさん
2017/05/29(月) 17:49:34.30ID:pjx27QrG618デフォルトの名無しさん
2017/05/29(月) 17:56:22.13ID:guqVR5DS 適切な処理をせずにスレッドを強制的に止めるのは設計がよくないという話、まあ気持ちは分かるけどね
619デフォルトの名無しさん
2017/05/29(月) 18:00:17.76ID:cnTBcIoG その前に終了処理したいのか一時停止したいのかで変わるだろうな
620デフォルトの名無しさん
2017/05/29(月) 18:00:51.67ID:oHsWfsZc621デフォルトの名無しさん
2017/05/29(月) 18:15:18.42ID:NQQqCKG9 皆さんありがとうございました
フラグで制御すると無限ループ内のいたるところでgoto文を書かなきゃ行けないので
まずいかなと思っておりました
やっぱりキャンセルで止める方法を調べてみます。
たくさんのご意見大変参考になりました。ありがとうございました!
フラグで制御すると無限ループ内のいたるところでgoto文を書かなきゃ行けないので
まずいかなと思っておりました
やっぱりキャンセルで止める方法を調べてみます。
たくさんのご意見大変参考になりました。ありがとうございました!
622デフォルトの名無しさん
2017/05/29(月) 18:32:30.18ID:KWmGTlOy >>617
フラグじゃHttpClientなんか止まらんでしょ
https://msdn.microsoft.com/ja-jp/library/hh551741(v=vs.118).aspx
CancellationToken 使って止めるのが普通です
フラグじゃHttpClientなんか止まらんでしょ
https://msdn.microsoft.com/ja-jp/library/hh551741(v=vs.118).aspx
CancellationToken 使って止めるのが普通です
623デフォルトの名無しさん
2017/05/29(月) 19:24:40.20ID:pjx27QrG >>622
俺の理解が間違ってるのかな?
確かにCancellationTokenSource使えばユーザーコードなしても実行前のタスクをキャンセルすることは
可能だと思うけど、一旦動き出したタスクを強制終了なんか出来ないと思うけど...
俺の理解が間違ってるのかな?
確かにCancellationTokenSource使えばユーザーコードなしても実行前のタスクをキャンセルすることは
可能だと思うけど、一旦動き出したタスクを強制終了なんか出来ないと思うけど...
624デフォルトの名無しさん
2017/05/29(月) 19:30:56.57ID:cnTBcIoG 外部exeとかもそうだけどキャンセルするからといってプロセスをすぐ殺す必要はないんだよな
>>623
安全に中断とかでなく止められれば何でもいいんだろ
質問者はもういないしスレ違いの方に行きそうだからその辺でやめてくれ
>>623
安全に中断とかでなく止められれば何でもいいんだろ
質問者はもういないしスレ違いの方に行きそうだからその辺でやめてくれ
625デフォルトの名無しさん
2017/05/29(月) 19:33:24.08ID:HUcfMRFq626デフォルトの名無しさん
2017/05/29(月) 19:52:24.02ID:NQQqCKG9 質問者です
強制終了させる必要はなかったので
結局キャンセル入れてタスクのループから抜けるということにしました
↓一部抜粋ですが以下のような感じです。これ便利ですね勉強になりました
Task taskTest = Task.Factory.StartNew(() =>
{
while (true)
{
try
{
cancellationTokenSource.Token.ThrowIfCancellationRequested();
}
catch (OperationCanceledException oce)
{
break;
}
}
cancellationTokenSource.Dispose();
cancellationTokenSource = null;
}, cancellationTokenSource.Token);
強制終了させる必要はなかったので
結局キャンセル入れてタスクのループから抜けるということにしました
↓一部抜粋ですが以下のような感じです。これ便利ですね勉強になりました
Task taskTest = Task.Factory.StartNew(() =>
{
while (true)
{
try
{
cancellationTokenSource.Token.ThrowIfCancellationRequested();
}
catch (OperationCanceledException oce)
{
break;
}
}
cancellationTokenSource.Dispose();
cancellationTokenSource = null;
}, cancellationTokenSource.Token);
627デフォルトの名無しさん
2017/05/29(月) 20:24:05.73ID:TtK3Weat 例外投げるのって結構コストがかかるんだよな
それでもループ抜けるのに例外使う利点って何か教えて
それでもループ抜けるのに例外使う利点って何か教えて
628デフォルトの名無しさん
2017/05/29(月) 20:30:33.89ID:UcFdrNFR カッコいいじゃん
629デフォルトの名無しさん
2017/05/29(月) 21:04:57.40ID:KWmGTlOy630デフォルトの名無しさん
2017/05/29(月) 22:15:44.46ID:cP3symFG631デフォルトの名無しさん
2017/05/29(月) 23:57:03.22ID:pjx27QrG632デフォルトの名無しさん
2017/05/30(火) 00:17:48.17ID:7mmlzI+/ >>631
Thread.Interruptと一緒ってのが間違い。
その記事にあるように、対応メソッドだけキャンセル出来る。
Thread.Interruptみたいに無理やり止めるわけじゃないから、こっちのが安全。
Thread.Interruptと一緒ってのが間違い。
その記事にあるように、対応メソッドだけキャンセル出来る。
Thread.Interruptみたいに無理やり止めるわけじゃないから、こっちのが安全。
633デフォルトの名無しさん
2017/05/30(火) 00:28:00.84ID:7mmlzI+/634デフォルトの名無しさん
2017/05/30(火) 00:30:40.38ID:iGfRfCvW >>631
リンク先のコードは試すまでもない意味不明なプログラムだな
CancellationTokenでのキャンセルは自分でTokenを監視してキャンセル処理を書かないと何もしてくれない
Task作るときに渡しといたからって中断処理をしてくれるわけじゃない
だからこの結果は当たり前
CancellationTokenに対応してるメソッドはTokenを監視してその処理固有の何らかのキャンセル方法を使って処理をキャンセルしてる
Thread.Interruptとは違う
リンク先のコードは試すまでもない意味不明なプログラムだな
CancellationTokenでのキャンセルは自分でTokenを監視してキャンセル処理を書かないと何もしてくれない
Task作るときに渡しといたからって中断処理をしてくれるわけじゃない
だからこの結果は当たり前
CancellationTokenに対応してるメソッドはTokenを監視してその処理固有の何らかのキャンセル方法を使って処理をキャンセルしてる
Thread.Interruptとは違う
635デフォルトの名無しさん
2017/05/30(火) 01:29:56.07ID:9DtCQxQF >>612で良かったじゃんな
636デフォルトの名無しさん
2017/05/30(火) 01:40:24.01ID:yo83A8ao637デフォルトの名無しさん
2017/05/30(火) 02:03:42.90ID:7mmlzI+/638デフォルトの名無しさん
2017/05/30(火) 02:06:44.79ID:yo83A8ao639デフォルトの名無しさん
2017/05/30(火) 07:06:41.02ID:3LKQdhjH >>612で良かったじゃんな
640デフォルトの名無しさん
2017/05/30(火) 08:10:12.34ID:nt0s20eG >>632,634
InterruptはSleepやロックを潰すだけだよ
従来Interruptで止めていたようなケースでは、自分でトークンの明示的なチェックなんていらなくて
呼び出し先の時間のかかるメソッドにトークンを適切に引き継ぐだけでいい(キャンセルされたら例外で止まるから)
基本的にスレッドをブロックするだけの同期処理とは違って、
async/awaitの場合は「待ち方」が実装に依存するので、最終的に「待っている」ところに限って
実装者がキャンセル処理を個別に実装する必要がある
そこ以外での扱いの考え方は基本的にはInterruptと変わらんよ
InterruptはSleepやロックを潰すだけだよ
従来Interruptで止めていたようなケースでは、自分でトークンの明示的なチェックなんていらなくて
呼び出し先の時間のかかるメソッドにトークンを適切に引き継ぐだけでいい(キャンセルされたら例外で止まるから)
基本的にスレッドをブロックするだけの同期処理とは違って、
async/awaitの場合は「待ち方」が実装に依存するので、最終的に「待っている」ところに限って
実装者がキャンセル処理を個別に実装する必要がある
そこ以外での扱いの考え方は基本的にはInterruptと変わらんよ
641デフォルトの名無しさん
2017/05/30(火) 08:36:57.90ID:nt0s20eG CancellationTokenの引き継ぎって明示的に渡さなくてもいいように実装できなかったのかな
一番深いところで例外を発生させるという、たかがそれだけのために途中の全てのメソッドに引数を追加しなきゃいけないのはイケてない
コンテキストを跨るから単純なスレッドローカルじゃ駄目なのはわかるけど、
そこだけSynchronizationContextみたいに手動でstaticプロパティから取ってきて明示的に引き継げばいいだけじゃないのか
それとも意図的に途中で連鎖を切るようなケースを想定してるのかな
一番深いところで例外を発生させるという、たかがそれだけのために途中の全てのメソッドに引数を追加しなきゃいけないのはイケてない
コンテキストを跨るから単純なスレッドローカルじゃ駄目なのはわかるけど、
そこだけSynchronizationContextみたいに手動でstaticプロパティから取ってきて明示的に引き継げばいいだけじゃないのか
それとも意図的に途中で連鎖を切るようなケースを想定してるのかな
642デフォルトの名無しさん
2017/05/30(火) 08:50:03.66ID:nt0s20eG あーでもキャンセルのハンドリング自体が非同期で行われるようなケースまで想定すると、
トークンをスレッドローカルにしたら無関係な他のジョブにまでキャンセルが伝播してしまうケースがあり得るね
やっぱりダメだな
トークンをスレッドローカルにしたら無関係な他のジョブにまでキャンセルが伝播してしまうケースがあり得るね
やっぱりダメだな
643デフォルトの名無しさん
2017/05/30(火) 09:01:41.80ID:+3RQshmo >>612で良かったじゃんな
644デフォルトの名無しさん
2017/05/30(火) 09:36:50.58ID:4zyQHZTY645デフォルトの名無しさん
2017/05/30(火) 10:23:05.72ID:22c10yuY >>644
それは別の問題だろ
それは別の問題だろ
646デフォルトの名無しさん
2017/05/30(火) 10:34:03.46ID:22c10yuY 呼び出した先のメソッドの止め方が分からないだけで
フラグでいいよ
フラグでいいよ
647デフォルトの名無しさん
2017/05/30(火) 11:47:54.70ID:27U6uUbR スクレイピングの処理時間の大半は、レスポンスが返ってくるのを待つ時間と受信処理
CancellationTokenならそれを中断できるけどフラグ処理じゃ手も足も出ない
まあ作っても役立たずのゴミクズボタンが出来るだけだな
CancellationTokenならそれを中断できるけどフラグ処理じゃ手も足も出ない
まあ作っても役立たずのゴミクズボタンが出来るだけだな
648デフォルトの名無しさん
2017/05/30(火) 13:19:04.25ID:iGfRfCvW >>640
従来Interruptで止めてたケースってなんだよ
ここでやってるスクレイピングのためのネットワーク処理はInterruptじゃ止まらないよね?
InterruptとCancellationTokenの類似性って見た目何らかの処理を中断して戻れるってだけでしょ、そんな事は指摘するまでもないし
それ以上は内部実装なども全然違うものだよ
もっと言うとCancellationTokenはキャンセル処理を統一的に扱うインターフェースでInterruptはその実装の一つと見れる
しかしCancellationTokenの実装としてスレッドのInterruptを使っているものは少なくともIO処理ではないでしょう
実際FileStreamのキャンセル実装はwin32apiのCancelIoEx使ってたし
ネットワーク系のもそんな感じでしょ
従来Interruptで止めてたケースってなんだよ
ここでやってるスクレイピングのためのネットワーク処理はInterruptじゃ止まらないよね?
InterruptとCancellationTokenの類似性って見た目何らかの処理を中断して戻れるってだけでしょ、そんな事は指摘するまでもないし
それ以上は内部実装なども全然違うものだよ
もっと言うとCancellationTokenはキャンセル処理を統一的に扱うインターフェースでInterruptはその実装の一つと見れる
しかしCancellationTokenの実装としてスレッドのInterruptを使っているものは少なくともIO処理ではないでしょう
実際FileStreamのキャンセル実装はwin32apiのCancelIoEx使ってたし
ネットワーク系のもそんな感じでしょ
649デフォルトの名無しさん
2017/05/30(火) 13:27:52.68ID:yiTLmUbP >>647
それと611の処理となんの関係があるの?
それと611の処理となんの関係があるの?
650626
2017/05/30(火) 14:31:20.95ID:Wk6Gc0Fl 昨日はタスクのキャンセルの件ありがとうございました。大変助かりました。
そして、また連日の投稿となってしまい申し訳ありませんが
現在また原因不明の現象に悩まされていて困っております。
もしよかったらどなたか解決して頂けませんでしょうか?
seleniumを使ったプログラムなんですが
一度遷移先でタイムアウトが発生してしまうと
それ以降別ページへの遷移ができなくなってしまうというものです。
そもそもなんでタイムアウトを設定しているかというと
重たいページであっても一定時間すぎたら無条件で次ページへ遷移してほしいからです
どなたか解決方法がわかる方お答え頂ければと思います。
ソースは以下のような感じです
webDriver = new ChromeDriver();
// タイムアウトを2秒に設定
webDriver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(2));
foreach (string UrlString in UrlList){
try
{
webDriver.Navigate().GoToUrl(UrlString); // 一度タイムアウトが発生すると次回以降遷移出来ない
}
catch (OpenQA.Selenium.WebDriverTimeoutException) { }
}
※UrlListには適当なURLがいくつかはいっております
度々すみませんがどうぞよろしくお願いします。
そして、また連日の投稿となってしまい申し訳ありませんが
現在また原因不明の現象に悩まされていて困っております。
もしよかったらどなたか解決して頂けませんでしょうか?
seleniumを使ったプログラムなんですが
一度遷移先でタイムアウトが発生してしまうと
それ以降別ページへの遷移ができなくなってしまうというものです。
そもそもなんでタイムアウトを設定しているかというと
重たいページであっても一定時間すぎたら無条件で次ページへ遷移してほしいからです
どなたか解決方法がわかる方お答え頂ければと思います。
ソースは以下のような感じです
webDriver = new ChromeDriver();
// タイムアウトを2秒に設定
webDriver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(2));
foreach (string UrlString in UrlList){
try
{
webDriver.Navigate().GoToUrl(UrlString); // 一度タイムアウトが発生すると次回以降遷移出来ない
}
catch (OpenQA.Selenium.WebDriverTimeoutException) { }
}
※UrlListには適当なURLがいくつかはいっております
度々すみませんがどうぞよろしくお願いします。
651デフォルトの名無しさん
2017/05/30(火) 14:47:13.92ID:4zyQHZTY >>649
関係ないと思うなら多分君はキャンセルフレームワークの使い方を勘違いしてるんだろうな
CancellationTokenは同じものを引き回して使うの
受け取ったCancellationTokenを呼び出し先のメソッドにそのまま渡すことで、
キャンセル要求時に処理がどのメソッドにあったとしても関係なく例外を起こして潰すことができる仕組みだ
関係ないと思うなら多分君はキャンセルフレームワークの使い方を勘違いしてるんだろうな
CancellationTokenは同じものを引き回して使うの
受け取ったCancellationTokenを呼び出し先のメソッドにそのまま渡すことで、
キャンセル要求時に処理がどのメソッドにあったとしても関係なく例外を起こして潰すことができる仕組みだ
652デフォルトの名無しさん
2017/05/30(火) 14:57:38.82ID:yiTLmUbP >>651
そんな仕組み誰も提供して欲しくないと思うわwww
そんな仕組み誰も提供して欲しくないと思うわwww
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★4 [Hitzeschleier★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 自民・麻生太郎副総裁 石破政権の1年は「どよーん」 高市政権発足で「何となく明るくなった」「世の中のことが決まり動いている」★2 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- ゆたぼん 二重手術を報告「めちゃくちゃ気に入っています」 [muffin★]
- コウメ太夫のネタ考えたから評価してくれ
- トランプ、G7に代わるcore 5を発表 [805596214]
- 【悲報】新米、全く売れなくて倉庫が満杯になってしまうwwwwwwwwwwwwwwwwwwww [802034645]
- 【悲報】日本共産党、ツイッター速報にブチギレ法的措置WWWWWWWWWWWWWWWWWWWWWWWWWWWW [935793931]
- 木曜日のんなっしょい❗(・o・🍬)仕放題スレ🏡
- 高市ってわざと日本を壊そうとしているスパイ的な役割なんじゃないか? [677076729]
